diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 3848b3e2a..000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -pipelined/busybear_boot/* filter=lfs diff=lfs merge=lfs -text diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..fe7eab6c8 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,21 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file + +version: 2 +updates: + # Update git submodules to latest version + - package-ecosystem: "gitsubmodule" + directory: "/" + schedule: + interval: "weekly" + ignore: + - dependency-name: "addins/coremark" + - dependency-name: "addins/embench-iot" + - dependency-name: "addins/verilog-ethernet" + # Update actions in the GitHub Actions workflow files + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/scripts/cli-space-cleanup.sh b/.github/scripts/cli-space-cleanup.sh new file mode 100755 index 000000000..0f8de1619 --- /dev/null +++ b/.github/scripts/cli-space-cleanup.sh @@ -0,0 +1,65 @@ +#!/bin/bash +########################################### +## GitHub runner space cleanup +## +## Written: Jordan Carlin, jcarlin@hmc.edu +## Created: 30 June 2024 +## Modified: +## +## Purpose: Remove unnecessary packages/directories from GitHub Actions runner + +## A component of the CORE-V-WALLY configurable RISC-V project. +## https://github.com/openhwgroup/cvw +## +## Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University +## +## SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 +## +## Licensed under the Solderpad Hardware License v 2.1 (the “License”); you may not use this file +## except in compliance with the License, or, at your option, the Apache License version 2.0. You +## may obtain a copy of the License at +## +## https:##solderpad.org/licenses/SHL-2.1/ +## +## Unless required by applicable law or agreed to in writing, any work distributed under the +## License is distributed on an “AS IS” BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, +## either express or implied. See the License for the specific language governing permissions +## and limitations under the License. +################################################################################################ + +# Remove unnecessary packages +removePacks=( '^llvm-.*' 'php.*' '^mongodb-.*' '^mysql-.*' '^dotnet-sdk-.*' 'azure-cli' 'google-cloud-cli' 'google-chrome-stable' 'firefox' '^powershell*' 'microsoft-edge-stable' 'mono-devel' 'hhvm' ) +for pack in "${removePacks[@]}"; do + sudo apt-get purge -y "$pack" || true +done +sudo apt-get autoremove -y || true +sudo apt-get clean || true + +# Remove unnecessary directories +sudo rm -rf /usr/local/lib/android +sudo rm -rf /usr/share/dotnet +sudo rm -rf /usr/share/swift +sudo rm -rf /usr/share/miniconda +sudo rm -rf /usr/share/az* +sudo rm -rf /usr/share/gradle-* +sudo rm -rf /usr/share/sbt +sudo rm -rf /opt/ghc +sudo rm -rf /usr/local/.ghcup +sudo rm -rf /usr/local/share/powershell +sudo rm -rf /usr/local/lib/node_modules +sudo rm -rf /usr/local/julia* +sudo rm -rf /usr/local/share/chromium +sudo rm -rf /usr/local/share/vcpkg +sudo rm -rf /usr/local/games +sudo rm -rf /usr/local/sqlpackage +sudo rm -rf /usr/lib/google-cloud-sdk +sudo rm -rf /usr/lib/jvm +sudo rm -rf /usr/lib/mono +sudo rm -rf /usr/lib/R +sudo rm -rf /usr/lib/postgresql +sudo rm -rf /usr/lib/heroku +sudo rm -rf /usr/lib/firefox +sudo rm -rf /opt/hostedtoolcache + +# Clean up docker images +sudo docker image prune --all --force diff --git a/.github/workflows/install.yml b/.github/workflows/install.yml new file mode 100644 index 000000000..922d894c5 --- /dev/null +++ b/.github/workflows/install.yml @@ -0,0 +1,183 @@ +################################## +# install.yml +# jcarlin@hmc.edu October 2024 +# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 +# +# GitHub Action to test the wally-tool-chain-install.sh script for all supported linux distributions +# and configurations. Runs weekly and on pull requests that modify the installation scripts. +################################## + +name: Installation + +# Run on PR that modifies the installation scripts, weekly, or manually +on: + workflow_dispatch: + pull_request: + branches: + - main + paths: + - 'bin/wally-tool-chain-install.sh' + - 'bin/wally-distro-check.sh' + - 'bin/wally-package-install.sh' + - '.github/workflows/install.yml' + schedule: + - cron: "0 7 * * 3" # Run at 12:00 AM Pacific Time on Wednesdays + +# Use bash shell with extra GitHub Actions options for all jobs +defaults: + run: + shell: bash + +jobs: + installation_test: + name: Test installation for ${{ matrix.name }} + strategy: + fail-fast: false + matrix: + include: + # Ubuntu Installations + - name: ubuntu-20.04 + image: ubuntu:20.04 + imageFamily: debian + regressionFail: true + - name: ubuntu-22.04 + image: ubuntu:22.04 + imageFamily: debian + - name: ubuntu-24.04 + image: ubuntu:24.04 + imageFamily: debian + # Debian Installations + - name: debian-12 + image: debian:12 + imageFamily: debian + - name: debian-11 + image: debian:11 + imageFamily: debian + # Red Hat Installations + - name: rocky-8 + image: rockylinux:8 + imageFamily: redhat + regressionFail: true + - name: rocky-9 + image: rockylinux:9 + imageFamily: redhat + - name: almalinux-8 + image: almalinux:8 + imageFamily: redhat + regressionFail: true + - name: almalinux-9 + image: almalinux:9 + imageFamily: redhat + # SUSE Installations + - name: opensuse-15.6 + image: opensuse/leap:15.6 + imageFamily: suse + # User level installation + - name: user-install + image: null + user: true + # Custom location installation + - name: custom-install + image: null + riscv_path: /home/riscv + # Custom location user level installation + - name: custom-user-install + image: null + user: true + riscv_path: $HOME/riscv-toolchain + + # run on selected version of ubuntu or on ubuntu-latest with docker image + runs-on: ubuntu-latest + container: + image: ${{ matrix.image }} + options: --privileged --mount type=bind,source=/,target=/host --pid=host --entrypoint /bin/bash # Allow for connection with host + + steps: + # Docker images need git installed or the checkout action fails + - name: Install Dependencies for Container Image + if: ${{ matrix.image != null }} + run: | + if [ ${{ matrix.imageFamily }} == "debian" ]; then + apt-get update + apt-get install -y git + elif [ ${{ matrix.imageFamily }} == "redhat" ]; then + dnf install -y git + dnf install curl -y --allowerasing || true + elif [ ${{ matrix.imageFamily }} == "suse" ]; then + zypper install -y git + fi + # Only clone submodules needed for standard tests/regression to save space + - uses: actions/checkout@v4 + - name: Clone Necessary Submodules + run: | + git config --global --add safe.directory '*' + git submodule update --init addins/riscv-arch-test addins/verilog-ethernet + # Free up space on the host machine, either from the container or the host + - name: Free Up Storage + run: | + df -h + if [ -z ${{ matrix.image }} ]; then + ./.github/scripts/cli-space-cleanup.sh + else + nsenter -t 1 -m -u -n -i bash -c "$(cat .github/scripts/cli-space-cleanup.sh)" + fi + df -h + # Run main tool chain installation script, either as a user or system wide + - name: Install + run: | + if [ ! -z ${{ matrix.image }} ]; then + ./bin/wally-tool-chain-install.sh --clean ${{ matrix.riscv_path }} + elif [ -z ${{ matrix.user }} ]; then + sudo ./bin/wally-tool-chain-install.sh --clean ${{ matrix.riscv_path }} + else + sudo ./bin/wally-package-install.sh + ./bin/wally-tool-chain-install.sh --clean ${{ matrix.riscv_path }} + fi + # Set environment variables for the rest of the job + - name: Set Environment Variables + if: always() + run: | + if [ ! -z ${{ matrix.riscv_path }} ]; then + sed -i 's,exit 1,export RISCV=${{ matrix.riscv_path }},g' setup.sh + fi + source setup.sh + echo "RISCV=$RISCV" >> "$GITHUB_ENV" + # Upload installation logs for debugging + - name: Upload Installation Logs + uses: actions/upload-artifact@v4 + if: always() + with: + name: installation-logs-${{ matrix.name }} + path: ${{ env.RISCV }}/logs/ + # Only the linux-testvectors are needed, so remove the rest of the buildroot to save space + # Logs have already been uploaded so they can be removed + - name: Clean up installation + run: | + rm -rf $RISCV/buildroot/ || sudo rm -rf $RISCV/buildroot/ + rm -rf $RISCV/logs || sudo rm -rf $RISCV/logs + df -h + # Make riscof and zsbl only as that is the only testsuite used by standard regression + - name: make tests + run: | + source setup.sh + make riscof zsbl --jobs $(nproc --ignore 1) + # Run standard regression, skipping distros that are known to be broken with Verilator + - name: Regression + if: ${{ matrix.regressionFail != true }} + run: | + source setup.sh + regression-wally + - name: Lint + wsim Test Only (for distros with broken Verilator sim) + if: ${{ matrix.regressionFail == true }} + run: | + source setup.sh + mkdir -p $WALLY/sim/verilator/logs/ + lint-wally + wsim rv32i arch32i --sim verilator | tee $WALLY/sim/verilator/logs/rv32i_arch32i.log + # Upload regression logs for debugging + - name: Upload regression logs + uses: actions/upload-artifact@v4 + if: always() + with: + name: regression-logs-${{ matrix.name }} + path: ${{ github.workspace }}/sim/verilator/logs/ diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 000000000..f4c7501d5 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,35 @@ +name: Lint + +on: + push: + paths: + - '**/*.py' + - 'bin/*' + - 'sim/vcs/run_vcs' + - '.ruff.toml' + - '!addins/*' + pull_request: + paths: + - '**/*.py' + - 'bin/*' + - 'sim/vcs/run_vcs' + - '.ruff.toml' + - '!addins/*' + +jobs: + lint: + name: Lint (Python ${{matrix.version}}) + strategy: + matrix: + version: [39, 312] # Test on oldest and newest verions used in wally-package-install.sh + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Set Python version + run: sed -i '/^target-version/c\target-version = "py${{matrix.version}}"' .ruff.toml + + - name: Ensure pre-commit checks pass + run: python3 -m pip install pre-commit && pre-commit run --all-files --show-diff-on-failure --color=always diff --git a/.gitignore b/.gitignore index 630731b23..11acaf0b1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,65 +1,44 @@ -**/work* -**/wally_*.log - +# General file extensions to ignore .nfs* - -__pycache__/ -.vscode/ - -#External repos -addins/riscv-arch-test/Makefile.include -addins/riscv-tests/target -addins/TestFloat-3e/build/Linux-x86_64-GCC/* -benchmarks/embench/wally*.json - -#vsim work files to ignore -transcript -vsim.wlf -wlft* -wlft* -/imperas-riscv-tests/FunctionRadix_32.addr -/imperas-riscv-tests/FunctionRadix_64.addr -/imperas-riscv-tests/FunctionRadix.addr -/imperas-riscv-tests/ProgramMap.txt -/imperas-riscv-tests/logs +*.objdump* *.o *.d +*.a *.vstf -testsBP/*/*/*.elf* -testsBP/*/OBJ/* -testsBP/*/*.a -tests/wally-riscv-arch-test/riscv-test-suite/*/I/*/* -tests/riscof/riscof_work/ +*.vcd +*.signature.output +*.dtb +*.log +*.map +*.elf* +*.list +*.memfile + +# General directories to ignore +.vscode/ +__pycache__/ +**/work* +!.github/* +/**/obj_dir* +/**/gmon* + +# Tests tests/riscof/config32.ini tests/riscof/config32e.ini tests/riscof/config64.ini -tests/linux-testgen/linux-testvectors/* -!tests/linux-testgen/linux-testvectors/tvCopier.py -!tests/linux-testgen/linux-testvectors/tvLinker.sh -!tests/linux-testgen/linux-testvectors/tvUnlinker.sh -tests/linux-testgen/buildroot -tests/linux-testgen/buildroot-image-output -tests/linux-testgen/buildroot-config-src/main.config.old -tests/linux-testgen/buildroot-config-src/linux.config.old -tests/linux-testgen/buildroot-config-src/busybox.config.old -sim/slack-notifier/slack-webhook-url.txt -sim/logs -fpga/generator/IP -fpga/generator/vivado.* -fpga/generator/.Xil/* -fpga/generator/WallyFPGA* -fpga/generator/reports/ -fpga/generator/*.log -fpga/generator/*.jou -*.objdump* -*.signature.output -examples/asm/sumtest/sumtest -examples/asm/example/example -examples/C/sum/sum -examples/C/fir/fir -examples/fp/softfloat_demo/softfloat_demo -examples/fp/fpcalc/fpcalc -src/fma/fma16_testgen +tests/riscof/riscof_work/ +tests/wally-riscv-arch-test/riscv-test-suite/*/I/*/** +tests/fp/vectors/*.tv +tests/fp/vectors/sed* +tests/fp/combined_IF_vectors/IF_vectors/*.tv +tests/custom/*/*/ +tests/custom/*/*/*.memfile +sim/tests/riscvdv +testbench/trek_files/uvm_output + +# Linux +linux/buildroot +linux/testvector-generation/boottrace.S linux/devicetree/debug/* !linux/devicetree/debug/dump-dts.sh linux/testvector-generation/genCheckpoint.gdb @@ -67,10 +46,30 @@ linux/testvector-generation/silencePipe linux/testvector-generation/silencePipe.control linux/testvector-generation/fixBinMem linux/testvector-generation/qemu-serial -*.dtb + +# FPGA +fpga/generator/IP +fpga/generator/vivado.* +fpga/generator/.Xil/* +fpga/generator/WallyFPGA* +fpga/generator/reports/ +fpga/generator/*.jou +fpga/src/sdc/* +fpga/src/sdc.tar.gz +fpga/src/CopiedFiles_do_not_add_to_repo/* +fpga/generator/sim/imp-funcsim.v +fpga/generator/sim/imp-timesim.sdf +fpga/generator/sim/imp-timesim.v +fpga/generator/sim/syn-funcsim.v +fpga/rvvidaemon/rvvidaemon +fpga/zsbl/OBJ/* +fpga/zsbl/bin/* +fpga/src/boot.mem +fpga/src/data.mem + +# Synthesis synthDC/WORK synthDC/alib-52 -synthDC/*.log synthDC/*.svf synthDC/runs/ synthDC/newRuns @@ -79,39 +78,99 @@ synthDC/ppa/plots synthDC/wallyplots/ synthDC/runArchive synthDC/hdl -sim/power.saif -tests/fp/vectors/*.tv synthDC/Summary.csv -sim/wkdir -tests/custom/work -tests/custom/*/*/*.list -tests/custom/*/*/*.elf -tests/custom/*/*/*.map -tests/custom/*/*/*.memfile -tests/custom/crt0/*.a -tests/custom/*/*.elf* -sim/sd_model.log -fpga/src/sdc/* -fpga/src/sdc.tar.gz -fpga/src/CopiedFiles_do_not_add_to_repo/* -sim/branch.log -/fpga/generator/sim/imp-funcsim.v -/fpga/generator/sim/imp-timesim.sdf -/fpga/generator/sim/imp-timesim.v -/fpga/generator/sim/syn-funcsim.v -external + +# Benchmarks +benchmarks/embench/wally*.json +benchmarks/embench/run* +benchmarks/coremark/coremark_results.csv + +# Simulation +sim/*.svg +sim/power.saif sim/results -tests/wally-riscv-arch-test/riscv-test-suite/rv*i_m/I/src/*.S -tests/wally-riscv-arch-test/riscv-test-suite/rv*i_m/I/Makefrag -sim/branch_BP_GSHARE10.log -sim/branch_BP_GSHARE16.log -sim/cov/ -sim/covhtmlreport/ -sim/imperas.log sim/results-error/ sim/test1.rep -sim/vsim.log -tests/coverage/*.elf -*.elf.memfile -sim/*Cache.log -sim/branch \ No newline at end of file +sim/branch +sim/branch-march14.tar.gz +sim/gshareforward-no-class +sim/local16.txt +sim/localhistory_m6k10_results_april24.txt +sim/cfi/* +sim/branch/* +sim/covhtmlreport/ +sim/*/*Cache.log + +# Questa +sim/questa/logs +sim/questa/wkdir +sim/questa/ucdb +sim/questa/cov +sim/questa/fcov +sim/questa/fcov_logs +sim/questa/fcov_ucdb +sim/questa/riscv.ucdb +transcript +vsim.wlf +wlft* + +# VCS +sim/vcs/logs +sim/vcs/wkdir +sim/vcs/ucdb +sim/vcs/csrc +sim/vcs/profileReport* +sim/vcs/program.out +sim/vcs/sim_out* +sim/vcs/simprofile_dir +sim/vcs/ucli.key +sim/vcs/verdi_config_file +sim/vcs/vcdplus.vpd +sim/vcs/simprofile* + +# Verilator +sim/verilator/logs +sim/verilator/wkdir + +# Examples +examples/verilog/fulladder/csrc/ +examples/verilog/fulladder/profileReport.html +examples/verilog/fulladder/profileReport.json +examples/verilog/fulladder/profileReport.txt +examples/verilog/fulladder/profileReport/ +examples/verilog/fulladder/simprofile_dir/ +examples/verilog/fulladder/simv.daidir/ +examples/verilog/fulladder/ucli.key +examples/verilog/fulladder/verdi_config_file +examples/fp/softfloat_demo/softfloat_demo +examples/fp/softfloat_demo/softfloat_demoDP +examples/fp/softfloat_demo/softfloat_demoQP +examples/fp/softfloat_demo/softfloat_demoSP +examples/fp/fpcalc/fpcalc +examples/fp/sqrttest/sqrttest +examples/crypto/gfmul/gfmul +examples/C/fir/fir +examples/C/inline/inline +examples/C/mcmodel/mcmodel_medany +examples/C/mcmodel/mcmodel_medlow +examples/C/sum/sum +examples/C/sum_mixed/sum_mixed +examples/C/hello/hello +examples/C/gpio/gpio +examples/asm/sumtest/sumtest +examples/asm/example/example +examples/asm/trap/trap +examples/asm/etc/pause +examples/C/fmul +examples/exercises/fma16/fma16.sv +examples/exercises/fma16/fma16_testgen +examples/exercises/fma16/sol +examples/exercises/riscvsoc_solutions + + +# Other +external +config/deriv +sim/slack-notifier/slack-webhook-url.txt +docs/docker/buildroot-config-src +docs/docker/testvector-generation diff --git a/.gitmodules b/.gitmodules index 78243a1de..672ec445f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,16 +1,3 @@ -[submodule "sky130/sky130_osu_sc_t12"] - path = sky130/sky130_osu_sc_t12 - url = https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12/ -[submodule "addins/riscv-arch-test"] - path = addins/riscv-arch-test - url = https://github.com/riscv-non-isa/riscv-arch-test - ignore = dirty -[submodule "addins/imperas-riscv-tests"] - path = addins/imperas-riscv-tests - url = https://github.com/riscv-ovpsim/imperas-riscv-tests -[submodule "addins/riscv-tests"] - path = addins/riscv-tests - url = https://github.com/riscv-software-src/riscv-tests [submodule "addins/riscv-dv"] path = addins/riscv-dv url = https://github.com/google/riscv-dv @@ -21,6 +8,28 @@ [submodule "addins/coremark"] path = addins/coremark url = https://github.com/eembc/coremark +[submodule "addins/vivado-boards"] + path = addins/vivado-boards + url = https://github.com/Digilent/vivado-boards/ +[submodule "addins/riscv-arch-test"] + path = addins/riscv-arch-test + url = https://github.com/riscv-non-isa/riscv-arch-test + branch = dev [submodule "addins/branch-predictor-simulator"] path = addins/branch-predictor-simulator - url = https://github.com/synxlin/branch-predictor-simulator.git + url = https://github.com/rosethompson/branch-predictor-simulator +[submodule "addins/verilog-ethernet"] + sparseCheckout = true + path = addins/verilog-ethernet + url = https://github.com/rosethompson/verilog-ethernet.git +[submodule "addins/cvw-arch-verif"] + path = addins/cvw-arch-verif + url = https://github.com/openhwgroup/cvw-arch-verif + ignore = dirty +[submodule "addins/berkeley-softfloat-3"] + path = addins/berkeley-softfloat-3 + url = https://github.com/ucb-bar/berkeley-softfloat-3.git +[submodule "addins/berkeley-testfloat-3"] + path = addins/berkeley-testfloat-3 + url = https://github.com/ucb-bar/berkeley-testfloat-3 + ignore = untracked diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 000000000..1ac8e720e --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,41 @@ +# .pre-commit-config.yaml +# jcarlin@hmc.edu 8 April 2025 +# Pre-commit hook configuration file for CVW + +# SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 + +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +exclude: addins/ +minimum_pre_commit_version: "4.0.0" +repos: + # Standard pre-commit hooks + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v5.0.0 + hooks: + - id: check-added-large-files + - id: check-case-conflict + - id: check-docstring-first + # - id: check-executables-have-shebangs + # - id: check-shebang-scripts-are-executable + - id: check-symlinks + exclude: bin/sim_bp # symlink to compiled executable + - id: requirements-txt-fixer + files: requirements.txt + # - id: end-of-file-fixer + # - id: trailing-whitespace + # args: [--markdown-linebreak-ext=md] + - id: check-merge-conflict + args: ["--assume-in-merge"] + exclude: \.adoc$ # sections titles Level 6 "=======" get flagged otherwise + - id: check-json + - id: check-toml + - id: check-yaml + + # Ruff python linter + - repo: https://github.com/astral-sh/ruff-pre-commit + rev: v0.11.4 + hooks: + # Run the linter. + - id: ruff + args: [ --fix ] diff --git a/.ruff.toml b/.ruff.toml new file mode 100644 index 000000000..50efc7fb0 --- /dev/null +++ b/.ruff.toml @@ -0,0 +1,34 @@ +# Lint all .py files and extra python scripts without extensions +exclude = ["addins/*"] + +# Target oldest version of Python used (Python 3.9 for Ubuntu 20.04 LTS) +target-version = "py39" + +line-length=250 + +[lint] +select = [ + "F", # various basic rules (pyflakes) + "E", # errors (pycodestyle) + "W", # warnings (pycodestyle) + "I", # Import related rules (isort) + "UP", # Upgraded version available in newer Python + "B", # bugbear rules + "A", # shadow builtins + "EXE", # Executable file shebangs + "Q003", # Avoidable escaped quotes + "Q004", # Unnecessary esacpe character + "RUF", # Ruff specific rules +] + +ignore = [ + "E501", # line too long + "E701", "E702", # multiple statements on one line + "E722", # do not use bare 'except' + "E741", # ambiguous variable name + "W291", # trailing whitespace + "W293", # blank line contains whitespace + "B007", # loop control variable not used + "B9", # overly opinionated rules + "RUF005", # iterable unpacking in list +] diff --git a/LICENSE b/LICENSE index 9d84dec0d..173f17332 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -// Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University +// Copyright (C) 2021-25 Harvey Mudd College & Oklahoma State University // // SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 // diff --git a/Makefile b/Makefile index 518bcd2dd..d50c761b8 100644 --- a/Makefile +++ b/Makefile @@ -2,25 +2,45 @@ # Top-level Makefile for CORE-V-Wally # SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 -all: - make install - make regression +MAKEFLAGS += --output-sync --no-print-directory -# install copies over the Makefile.include from riscv-isa-sim -# And corrects the TARGETDIR path and the RISCV_PREFIX +SIM = ${WALLY}/sim -install: - # *** 1/15/23 dh: check if any of this is still needed - #cp ${RISCV}/riscv-isa-sim/arch_test_target/spike/Makefile.include addins/riscv-arch-test/ - #sed -i '/export TARGETDIR ?=/c\export TARGETDIR ?= ${RISCV}/riscv-isa-sim/arch_test_target' addins/riscv-arch-test/Makefile.include - #echo export RISCV_PREFIX = riscv64-unknown-elf- >> addins/riscv-arch-test/Makefile.include - ##cd tests/linux-testgen/linux-testvectors; source ./tvLinker.sh # needs to be run in local directory - ##rm tests/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64/riscvOVPsimPlus.exe - ##ln -s ${RISCV}/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64/riscvOVPsimPlus.exe tests/imperas-riscv-tests/riscv-ovpsim-plus/bin/Linux64/riscvOVPsimPlus.exe +.PHONY: all riscof testfloat combined_IF_vectors zsbl coverage cvw-arch-verif sim_bp clean -regression: - make -C sim +all: riscof testfloat combined_IF_vectors zsbl coverage sim_bp # cvw-arch-verif + +# riscof builds the riscv-arch-test and wally-riscv-arch-test suites +riscof: + $(MAKE) -C sim + +testfloat: + $(MAKE) -C ${WALLY}/tests/fp vectors + +combined_IF_vectors: testfloat riscof + $(MAKE) -C ${WALLY}/tests/fp combined_IF_vectors + +zsbl: + $(MAKE) -C ${WALLY}/fpga/zsbl + +coverage: + $(MAKE) -C tests/coverage + +cvw-arch-verif: + $(MAKE) -C ${WALLY}/addins/cvw-arch-verif + +sim_bp: ${WALLY}/addins/branch-predictor-simulator/src/sim_bp + +${WALLY}/addins/branch-predictor-simulator/src/sim_bp: + $(MAKE) -C ${WALLY}/addins/branch-predictor-simulator/src + +# Requires a license for the Breker tool. See tests/breker/README.md for details +breker: + $(MAKE) -C ${WALLY}/testbench/trek_files + $(MAKE) -C ${WALLY}/tests/breker clean: - make clean -C sim - + $(MAKE) clean -C sim + $(MAKE) clean -C ${WALLY}/tests/fp + $(MAKE) clean -C ${WALLY}/tests/coverage + $(MAKE) clean -C ${WALLY}/addins/cvw-arch-verif diff --git a/README.md b/README.md index b73aecdb8..b700df728 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ +[![Installation CI](https://github.com/openhwgroup/cvw/actions/workflows/install.yml/badge.svg?branch=main)](https://github.com/openhwgroup/cvw/actions/workflows/install.yml) + # core-v-wally -Wally is a 5-stage pipelined processor configurable to support all the standard RISC-V options, incluidng RV32/64, A, C, F, D, Q, M, and Zb* extensions, virtual memory, PMP, and the various privileged modes and CSRs. It provides optional caches, branch prediction, and standard RISC-V peripherals (CLINT, PLIC, UART, GPIO). Wally is written in SystemVerilog. It passes the RISC-V Arch Tests and boots Linux on an FPGA. Configurations range from a minimal RV32E core to a fully featured RV64GC application processor. +Wally is a 5-stage pipelined processor configurable to support all the standard RISC-V options, including RV32/64, A, B, C, D, F, M, Q, and Zk* extensions, virtual memory, PMP, and the various privileged modes and CSRs. It provides optional caches, branch prediction, and standard RISC-V peripherals (CLINT, PLIC, UART, GPIO). Wally is written in SystemVerilog. It passes the [RISC-V Arch Tests](https://github.com/riscv-non-isa/riscv-arch-test) and boots Linux on an FPGA. Configurations range from a minimal RV32E core to a fully featured RV64GC application processor with all of the RVA22S64 profile extensions. Wally is part of the OpenHWGroup family of robust open RISC-V cores. ![Wally block diagram](wallyriscvTopAll.png) @@ -8,124 +10,276 @@ Wally is described in an upcoming textbook, *RISC-V System-on-Chip Design*, by H # Verification -Wally is presently at Technology Readiness Level 4, passing the RISC-V compatibility test suite and custom tests, and booting Linux in simulation and on an FPGA. See the [Test Plan](docs/testplan.md) for details. +Wally is presently at Technology Readiness Level 4, passing the RISC-V compatibility test suite and custom tests, and booting Linux in simulation and on an FPGA. See the [Test Plan](docs/testplans/testplan.md) for details. # New User Setup New users may wish to do the following setup to access the server via a GUI and use a text editor. - Git started with Git configuration and authentication: B.1 (replace with your name and email) - $ git config --global user.name "Ben Bitdiddle" - $ git config --global user.email "ben_bitdiddle@wally.edu" - $ git config --global pull.rebase false - Optional: Download and install x2go - A.1.1 - Optional: Download and install VSCode - A.4.2 - Optional: Make sure you can log into your server via x2go and via a terminal - Terminal on Mac, cmd on Windows, xterm on Linux - See A.1 about ssh -Y login from a terminal +- Git started with Git configuration and authentication: C.1 (replace with your name and email) + ```bash + $ git config --global user.name "Ben Bitdiddle" + $ git config --global user.email "ben_bitdiddle@wally.edu" + $ git config --global pull.rebase false + ``` +- Optional: Download and install x2go - B.1.1 +- Optional: Download and install VSCode - B.4.2 +- Optional: Make sure you can log into your server via x2go and via a terminal + - Terminal on Mac, cmd on Windows, xterm on Linux + - See B.1 about ssh -Y login from a terminal -Then clone the repo, source setup, make the tests and run regression +Then fork and clone the repo, source setup, make the tests and run regression - If you don't already have a Github account, create one - In a web browser, visit https://github.com/openhwgroup/cvw - In the upper right part of the screen, click on Fork - Create a fork, choosing the owner as your github account and the repository as cvw. - - On the Linux computer where you will be working, log in - -Clone your fork of the repo and run the setup script. - - $ cd +1. If you don't already have a Github account, create one +2. In a web browser, visit https://github.com/openhwgroup/cvw +3. In the upper right part of the screen, click on Fork +4. Create a fork, choosing the owner as your github account and the repository as cvw. +5. On the Linux computer where you will be working, log in. +6. Clone your fork of the repo. Change `` to your github id. + ```bash $ git clone --recurse-submodules https://github.com//cvw $ cd cvw $ git remote add upstream https://github.com/openhwgroup/cvw + ``` + +> [!NOTE] +> If you are installing on a new system without any tools installed, please jump to the next section, [Toolchain Installation](#toolchain-installation-and-configuration-sys-admin), then come back here. + +7. Run the setup script to update your `PATH` and activate the python virtual environment. + + ```bash $ source ./setup.sh + ``` -Add the following lines to your .bashrc or .bash_profile to run the setup script each time you log in. +8. Add the following lines to your `.bashrc` or `.bash_profile` to run the setup script each time you log in. + ```bash if [ -f ~/cvw/setup.sh ]; then source ~/cvw/setup.sh fi + ``` -Edit setup.sh and change the following lines to point to the path and license server for your Siemens Questa and Synopsys Design Compiler installation and license server. If you only have Questa, you can still simulate but cannot run logic synthesis. - - export MGLS_LICENSE_FILE=1717@solidworks.eng.hmc.edu # Change this to your Siemens license server - export SNPSLMD_LICENSE_FILE=27020@zircon.eng.hmc.edu # Change this to your Synopsys license server - export QUESTAPATH=/cad/mentor/questa_sim-2021.2_1/questasim/bin # Change this for your path to Questa - export SNPSPATH=/cad/synopsys/SYN/bin # Change this for your path to Design Compiler - -If the tools are not yet installed on your server, follow the Toolchain Installation instructions in the section below. - -Build the tests and run a regression simulation with Questa to prove everything is installed. Building tests will take a while. - +9. Try compiling the HelloWally program and simulating it on the SystemVerilog with Verilator and on the Spike simulator. + ``` + $ cd examples/C/hello $ make - $ cd sim - $ ./regression-wally (depends on having Questa installed) + $ wsim --sim verilator rv64gc --elf hello + Hello Wally! + 0 1 2 3 4 5 6 7 8 9 + $ spike hello + Hello Wally! + 0 1 2 3 4 5 6 7 8 9 + ``` -# Toolchain Installation (Sys Admin) +10. Build the tests and run a regression simulation to prove everything is installed. Building tests may take a while. -This section describes the open source toolchain installation. The -current version of the toolchain has been tested on Ubuntu and Red -Hat/Rocky 8 Linux. Ubuntu works more smoothly and is recommended -unless you have a compelling need for RedHat. + ```bash + $ make --jobs + $ regression-wally + ``` -Ubuntu users can install the tools by running +# Toolchain Installation and Configuration (Sys Admin) - $ sudo $WALLY/bin/wally-tool-chain-install.sh +> This section describes the open source toolchain installation. -See wally-tool-chain-install.sh for a detailed description of each component, -or to issue the commands one at a time to install on the command line. -## Installing EDA Tools +### Compatibility +The current version of the toolchain has been tested on Ubuntu (versions 20.04 LTS, 22.04 LTS, and 24.04 LTS), Debian (versions 11 and 12), Red Hat/Rocky/AlmaLinux (versions 8 and 9), +and SUSE version 15.6. Only the latest minor release of each major version is tested. + +> [!WARNING] +> - Ubuntu 22.04LTS is incompatible with Synopsys Design Compiler. +> - Verilator currently fails to simulate correctly on Ubuntu 20.04 LTS and Red Hat/Rocky/AlmaLinux 8. + +### Overview +The toolchain installation script installs the following tools: +- [RISC-V GNU Toolchain](https://github.com/riscv-collab/riscv-gnu-toolchain): GCC and accompanying compiler tools +- [elf2hex](https://github.com/sifive/elf2hex): executable file to hexadecimal converter +- [QEMU](https://www.qemu.org/docs/master/system/target-riscv.html): emulator +- [Spike](https://github.com/riscv-software-src/riscv-isa-sim): functional RISC-V model +- [Verilator](https://github.com/verilator/verilator): open-source Verilog simulator +- [RISC-V Sail Model](https://github.com/riscv/sail-riscv): golden reference model for RISC-V +- [OSU Skywater 130 cell library](https://foss-eda-tools.googlesource.com/skywater-pdk/libs/sky130_osu_sc_t12): standard cell library +- [RISCOF](https://github.com/riscv-software-src/riscof.git): RISC-V compliance test framework + +Additionally, Buildroot Linux is built for Wally and linux test-vectors are generated for simulation. See the [Linux README](linux/README.md) for more details. This can be skipped using the `--no-buildroot` flag. + +### Installation + +The tools can be installed by running + +```bash +$ $WALLY/bin/wally-tool-chain-install.sh +``` +If this script is run as root or using `sudo`, it will also install all of the prerequisite packages using the system package manager. The default installation directory when run in this manner is `/opt/riscv`. + +If a user-level installation is desired, the script can instead be run by any user without `sudo` and the installation directory will be `~/riscv`. In this case, the prerequisite packages must first be installed by running + +```bash +$ sudo $WALLY/bin/wally-package-install.sh +``` + +In either case, the installation directory can be overridden by passing the desired directory as the last argument to the installation script. For example, + +```bash +$ sudo $WALLY/bin/wally-tool-chain-install.sh /home/riscv +``` + +See `wally-tool-chain-install.sh` for a detailed description of each component, or to issue the commands one at a time to install on the command line. + +> [!NOTE] +> The complete installation process requires ~55 GB of free space. If the `--clean` flag is passed to the installation script then the final consumed space is only ~26 GB, but upgrading the tools will reinstall everything from scratch. + +### Configuration +`$WALLY/setup.sh` sources `$RISCV/site-setup.sh`. If the toolchain was installed in either of the default locations (`/opt/riscv` or `~/riscv`), `$RISCV` will automatically be set to the correct path when `setup.sh` is run. If a custom installation directory was used, then `$WALLY/setup.sh` must be modified to set the correct path. + +`$RISCV/site-setup.sh` allows for customization of the site specific information such as commercial licenses and PATH variables. It is automatically copied into your `$RISCV` folder when the installation script is run. + +Change the following lines to point to the path and license server for your Siemens Questa and Synopsys Design Compiler and VCS installations and license servers. If you only have Questa or VCS, you can still simulate but cannot run logic synthesis. If Questa, VSC, or Design Compiler are already setup on this system then don't set these variables. + +```bash +export MGLS_LICENSE_FILE=.. # Change this to your Siemens license server +export SNPSLMD_LICENSE_FILE=.. # Change this to your Synopsys license server +export QUESTA_HOME=.. # Change this for your path to Questa +export DC_HOME=.. # Change this for your path to Synopsys Design Compiler +export VCS_HOME=.. # Change this for your path to Synopsys VCS +``` + +# Installing EDA Tools Electronic Design Automation (EDA) tools are vital to implementations of System on Chip architectures as well as validating different designs. Open-source and commercial tools exist for multiple strategies and although the one can spend a lifetime using combinations of different tools, only a small subset of tools is utilized for this text. The tools are chosen because of their ease in access as well as their repeatability for accomplishing many of the tasks utilized to design Wally. It is anticipated that additional tools may be documented later after this is text is published to improve use and access. -Siemens Quest is the primary tool utilized for simulating and validating Wally. For logic synthesis, you will need Synopsys Design Compiler. Questa and Design Compiler are commercial tools that require an educational or commercial license. +Verilator is an open-source Verilog simulator. It is fast and free. Run Wally on the riscv-arch-test suite using Verilator with: -Note: Some EDA tools utilize LM_LICENSE_FILE for their environmental variable to point to their license server. Some operating systems may also utilize MGLS_LICENSE_FILE instead, therefore, it is important to read the user manual on the preferred environmental variable required to point to a user’s license file. Although there are different mechanisms to allow licenses to work, many companies commonly utilize the FlexLM (i.e., Flex-enabled) license server manager that runs off a node locked license. +``` +regression-wally +``` -Although most EDA tools are Linux-friendly, they tend to have issues when not installed on recommended OS flavors. Both Red Hat Enterprise Linux and SUSE Linux products typically tend to be recommended for installing commercial-based EDA tools and are recommended for utilizing complex simulation and architecture exploration. Questa can also be installed on Microsoft Windows as well as Mac OS with a Virtual Machine such as Parallels. +Running code or functional coverage simulations or lock-step presently require commercial tools. Siemens Questa is the primary tool utilized for simulating and validating Wally. Synopsys VCS also can run regression-wally and lock-step simulation. For logic synthesis, you will need Synopsys Design Compiler. Questa and Design Compiler are commercial tools that require an educational or commercial license. -Siemens Questa +Note: Some EDA tools utilize `LM_LICENSE_FILE` for their environmental variable to point to their license server. Some operating systems may also utilize `MGLS_LICENSE_FILE` instead, therefore, it is important to read the user manual on the preferred environmental variable required to point to a user’s license file. Although there are different mechanisms to allow licenses to work, many companies commonly utilize the FlexLM (i.e., Flex-enabled) license server manager that runs off a node locked license. -Siemens Questa simulates behavioral, RTL and gate-level HDL. To install Siemens Questa first go to a web browser and navigate to -https://eda.sw.siemens.com/en-US/ic/questa/simulation/advanced-simulator/. Click Sign In and log in with your credentials and the product can easily be downloaded and installed. Some Windows-based installations also require gcc libraries that are typically provided as a compressed zip download through Siemens. +Although most EDA tools are Linux-friendly, they tend to have issues when not installed on recommended OS flavors. Red Hat Enterprise Linux (and its free Rocky clone) and SUSE Linux products typically tend to be recommended for installing commercial-based EDA tools and are recommended for utilizing complex simulation and architecture exploration. -Synopsys Design Compiler (DC) +### Siemens Questa -Many commercial synthesis and place and route tools require a common installer. These installers are provided by the EDA vendor and Synopsys has one called Synopsys Installer. To use Synopsys Installer, you will need to acquire a license through Synopsys that is typically Called Synopsys Common Licensing (SCL). Both the Synopsys Installer, license key file, and Design Compiler can all be downloaded through Synopsys Solvnet. First open a web browser, log into Synsopsy Solvnet, and download the installer and Design Compiler installation files. Then, install the Installer +Siemens Questa simulates behavioral, RTL and gate-level HDL. To install Siemens Questa first go to a web browser and navigate to https://eda.sw.siemens.com/en-US/ic/questa/simulation/advanced-simulator/. Click Sign In and log in with your credentials and the product can easily be downloaded and installed. Some Windows-based installations also require gcc libraries that are typically provided as a compressed zip download through Siemens. - $ firefox & -Navigate to https://solvnet.synopsys.com -Log in with your institution’s username and password -Click on Downloads, then scroll down to Synopsys Installer -Select the latest version (currently 5.4). Click Download Here, agree, -Click on SynopsysInstaller_v5.4.run -Return to downloads and also get Design Compiler (synthesis) latest version, and any others you want. - Click on all parts and the .spf file, then click Download Files near the top -move the SynopsysIntaller into /cad/synopsys/Installer_5.4 with 755 permission for cad, -move other files into /cad/synopsys/downloads and work as user cad from here on +### Synopsys Design Compiler (DC) - $ cd /cad/synopsys/installer_5.4 - $ ./SynopsysInstaller_v5.4.run - Accept default installation directory - $ ./installer - Enter source path as /cad/synopsys/downloads, and installation path as /cad/synopsys - When prompted, enter your site ID - Follow prompts +Many commercial synthesis and place and route tools require a common installer. These installers are provided by the EDA vendor and Synopsys has one called Synopsys Installer. To use Synopsys Installer, you will need to acquire a license through Synopsys that is typically Called Synopsys Common Licensing (SCL). Both the Synopsys Installer, license key file, and Design Compiler can all be downloaded through Synopsys Solvnet. First open a web browser, log into Synsopsy Solvnet, and download the installer and Design Compiler installation files. Then, install the Installer. -Installer can be utilized in graphical or text-based modes. It is far easier to use the text-based installation tool. To install DC, navigate to the location where your downloaded DC files are and type installer. You should be prompted with questions related to where you wish to have your files installed. +```bash +$ firefox & +``` -The Synopsys Installer automatically installs all downloaded product files into a single top-level target directory. You do not need to specify the installation directory for each product. For example, if you specify /import/programs/synopsys as the target directory, your installation directory structure might look like this after installation: +- Navigate to https://solvnet.synopsys.com +- Log in with your institution’s username and password +- Click on Downloads, then scroll down to Synopsys Installer +- Select the latest version (currently 5.4). Click Download Here, agree, +- Click on SynopsysInstaller_v5.4.run +- Return to downloads and also get Design Compiler (synthesis) latest version, and any others you want. +- Click on all parts and the .spf file, then click Download Files near the top +- Move the SynopsysInstaller into `/cad/synopsys/Installer_5.4` with 755 permission for cad, +- move other files into `/cad/synopsys/downloads` and work as user cad from here on - /import/programs/synopsys/syn/S-2021.06-SP1 +```bash +$ cd /cad/synopsys/installer_5.4 +$ ./SynopsysInstaller_v5.4.run +``` +- Accept default installation directory +```bash +$ ./installer +``` +- Enter source path as `/cad/synopsys/downloads`, and installation path as `/cad/synopsys` +- When prompted, enter your site ID +- Follow prompts -Note: Although most parts of Wally, including the software used in this chapter and Questa simulation, will work on most modern Linux platforms, as of 2022, the Synopsys CAD tools for SoC design are only supported on RedHat Enterprise Linux 7.4 or 8 or SUSE Linux Enterprise Server (SLES) 12 or 15. Moreover, the RISC-V formal specification (sail-riscv) does not build gracefully on RHEL7. +Installer can be utilized in graphical or text-based modes. It is far easier to use the text-based installation tool. To install DC, navigate to the location where your downloaded DC files are and type installer. You should be prompted with questions related to where you wish to have your files installed. -The Verilog simulation has been tested with Siemens Questa/ModelSim. This package is available to universities worldwide as part of the Design Verification Bundle through the Siemens Academic Partner Program members for $990/year. +The Synopsys Installer automatically installs all downloaded product files into a single top-level target directory. You do not need to specify the installation directory for each product. For example, if you specify `/import/programs/synopsys` as the target directory, your installation directory structure might look like this after installation: -If you want to implement your own version of the chip, your tool and license complexity rises significantly. Logic synthesis uses Synopsys Design Compiler. Placement and routing uses Cadence Innovus. Both Synopsys and Cadence offer their tools at a steep discount to their university program members, but the cost is still several thousand dollars per year. Most research universities with integrated circuit design programs have Siemens, Synopsys, and Cadence licenses. You also need a process design kit (PDK) for a specific integrated circuit technology and its libraries. The open-source Google Skywater 130 nm PDK is sufficient to synthesize the core but lacks memories. Google presently funds some fabrication runs for universities. IMEC and Muse Semiconductor offers full access to multiproject wafer fabrication on the TSMC 28 nm process including logic, I/O, and memory libraries; this involves three non-disclosure agreements. Fabrication costs on the order of $10,000 for a batch of 1 mm2 chips. +```bash +/import/programs/synopsys/syn/S-2021.06-SP1 +``` + +> [!Note] +> Although most parts of Wally, including the Questa simulator, will work on most modern Linux platforms, as of 2024, the Synopsys CAD tools for SoC design are only supported on Red Hat Enterprise Linux (or AlmaLinux/Rocky) 8.4+ or 9.1+ or SUSE Linux Enterprise Server (SLES) 15. + +The Verilog simulation has been tested with Siemens Questa/ModelSim. This package is available to universities worldwide as part of the Design Verification Bundle through the Siemens Academic Partner Program members for $990/year. + +If you want to implement your own version of the chip, your tool and license complexity rises significantly. Logic synthesis uses Synopsys Design Compiler. Placement and routing uses Cadence Innovus. Both Synopsys and Cadence offer their tools at a steep discount to their university program members, but the cost is still several thousand dollars per year. Most research universities with integrated circuit design programs have Siemens, Synopsys, and Cadence licenses. You also need a process design kit (PDK) for a specific integrated circuit technology and its libraries. The open-source Google Skywater 130 nm PDK is sufficient to synthesize the core but lacks memories. Google presently funds some fabrication runs for universities. IMEC and Muse Semiconductor offers full access to multiproject wafer fabrication on the TSMC 28 nm process including logic, I/O, and memory libraries; this involves three non-disclosure agreements. Fabrication costs on the order of $10,000 for a batch of 1 mm2 chips. Startups can expect to spend more than $1 million on CAD tools to get a chip to market. Commercial CAD tools are not realistically available to individuals without a university or company connection. +# Adding Cron Job for nightly builds +If you want to add a cronjob you can do the following: +1) Set up the email client `mutt` to send emails through the command line +2) Enter `crontab -e` into a terminal +3) add this code to test cloning CVW, making CVW's tests, then running `regression-wally --nightly --buildroot` every day at 21:30 in your local time +```bash +30 21 * * * curl -L https://raw.githubusercontent.com/openhwgroup/cvw/refs/heads/main/bin/nightly_build.py | python - --path {PATH_FOR_NIGHTLY_RUNS} --target all --tests all --send_email harris@hmc.edu,rose@rosethompson.net +``` +This utility will take up approximately 100 GB on your hard drive. You can also run the script directly from `bin/nightly_build.py`. + +# Example wsim commands + +wsim runs one of multiple simulators, Questa, VCS, or Verilator using a specific configuration and either a suite of tests or a specific elf file. +The general syntax is +`wsim [--options]` + +Parameters and options: + +``` +-h, --help show this help message and exit +--elf ELF, -e ELF ELF File name; use if name does not end in .elf +--sim {questa,verilator,vcs}, -s {questa,verilator,vcs} Simulator +--tb {testbench,testbench_fp}, -t {testbench,testbench_fp} Testbench +--gui, -g Simulate with GUI +--ccov, -c Code Coverage +--fcov, -f Functional Coverage with cvw-arch-verif, implies lockstep +--args ARGS, -a ARGS Optional arguments passed to simulator via $value$plusargs +--params PARAMS, -p PARAMS Optional top-level parameter overrides of the form param=value +--define DEFINE, -d DEFINE Optional define macros passed to simulator +--vcd, -v Generate testbench.vcd +--lockstep, -l Run ImperasDV lock, step, and compare. +--lockstepverbose, -lv Run ImperasDV lock, step, and compare with tracing enabled +--rvvi, -r Simulate rvvi hardware interface and ethernet. +``` + +Run basic test with Questa + +```bash +wsim rv64gc arch64i +``` + +Run Questa with gui + +```bash +wsim rv64gc wally64priv --gui +``` + +Run basic test with Verilator + +```bash +wsim rv32i arch32i --sim verilator +``` + +Run lockstep against ImperasDV with a single elf file in the gui. Lockstep requires single elf. + +```bash +wsim rv64gc $WALLY/tests/riscof/work/riscv-arch-test/rv64i_m/I/src/add-01.S/ref/ref.elf --lockstep --gui +``` + +Run lockstep against ImperasDV with a single elf file. Collect functional coverage. + +```bash +wsim rv64gc $WALLY/addins/cvw-arch-verif/tests/rv64/Zicsr/WALLY-COV-ALL.elf --fcov +``` + +Run Linux boot simulation in lock step between Wally and ImperasDV + +```bash +wsim buildroot buildroot --args +INSTR_LIMIT=600000000 --lockstep +``` diff --git a/addins/README.md b/addins/README.md new file mode 100644 index 000000000..ba04e05eb --- /dev/null +++ b/addins/README.md @@ -0,0 +1,3 @@ +verilog-ethernet contains many ethernet devices. Wally's synthesizable RVVI interface only requires a small subset of these files. +To do a sparse checkout of this repo copy sparse-checkout to cvw/.git/modules/addins/verilog-ethernet/info +This will make the working directory only contain the necessary files. diff --git a/addins/SoftFloat-3e/COPYING.txt b/addins/SoftFloat-3e/COPYING.txt deleted file mode 100644 index 9c05d49ca..000000000 --- a/addins/SoftFloat-3e/COPYING.txt +++ /dev/null @@ -1,37 +0,0 @@ - -License for Berkeley SoftFloat Release 3e - -John R. Hauser -2018 January 20 - -The following applies to the whole of SoftFloat Release 3e as well as to -each source file individually. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/addins/SoftFloat-3e/README.html b/addins/SoftFloat-3e/README.html deleted file mode 100644 index 7989e0c26..000000000 --- a/addins/SoftFloat-3e/README.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - -Berkeley SoftFloat Package Overview - - - - -

Package Overview for Berkeley SoftFloat Release 3e

- -

-John R. Hauser
-2018 January 20
-

- -

-Berkeley SoftFloat is a software implementation of binary floating-point that -conforms to the IEEE Standard for Floating-Point Arithmetic. -SoftFloat is distributed in the form of C source code. -Building the SoftFloat sources generates a library file (typically -softfloat.a or libsoftfloat.a) containing the -floating-point subroutines. -

- -

-The SoftFloat package is documented in the following files in the -doc subdirectory: -

- - - - - - - - - - - - - -
SoftFloat.htmlDocumentation for using the SoftFloat functions.
SoftFloat-source.htmlDocumentation for building SoftFloat.
SoftFloat-history.html   History of the major changes to SoftFloat.
-
-Other files in the package comprise the source code for SoftFloat. -

- - - diff --git a/addins/SoftFloat-3e/README.txt b/addins/SoftFloat-3e/README.txt deleted file mode 100644 index f819baa5c..000000000 --- a/addins/SoftFloat-3e/README.txt +++ /dev/null @@ -1,21 +0,0 @@ - -Package Overview for Berkeley SoftFloat Release 3e - -John R. Hauser -2018 January 20 - -Berkeley SoftFloat is a software implementation of binary floating-point -that conforms to the IEEE Standard for Floating-Point Arithmetic. SoftFloat -is distributed in the form of C source code. Building the SoftFloat sources -generates a library file (typically "softfloat.a" or "libsoftfloat.a") -containing the floating-point subroutines. - -The SoftFloat package is documented in the following files in the "doc" -subdirectory: - - SoftFloat.html Documentation for using the SoftFloat functions. - SoftFloat-source.html Documentation for building SoftFloat. - SoftFloat-history.html History of the major changes to SoftFloat. - -Other files in the package comprise the source code for SoftFloat. - diff --git a/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile deleted file mode 100644 index 418160051..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-GCC/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086 - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile deleted file mode 100644 index 1cf6f5e1a..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile deleted file mode 100644 index 2565fe56c..000000000 --- a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile +++ /dev/null @@ -1,323 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= ARM-VFPv2 - -SOFTFLOAT_OPTS ?= -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile deleted file mode 100644 index 570337825..000000000 --- a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile +++ /dev/null @@ -1,390 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration -DSOFTFLOAT_FAST_INT64 \ - $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h +++ /dev/null @@ -1,54 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#define SOFTFLOAT_INTRINSIC_INT128 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a b/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a deleted file mode 100644 index 69cd932a8..000000000 Binary files a/addins/SoftFloat-3e/build/Linux-x86_64-GCC/softfloat.a and /dev/null differ diff --git a/addins/SoftFloat-3e/build/Win32-MinGW/Makefile b/addins/SoftFloat-3e/build/Win32-MinGW/Makefile deleted file mode 100644 index 418160051..000000000 --- a/addins/SoftFloat-3e/build/Win32-MinGW/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086 - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win32-MinGW/platform.h b/addins/SoftFloat-3e/build/Win32-MinGW/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Win32-MinGW/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile b/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile deleted file mode 100644 index 1cf6f5e1a..000000000 --- a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(SOFTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -MAKELIB = ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h b/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/addins/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile b/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile deleted file mode 100644 index 05bbf5bb5..000000000 --- a/addins/SoftFloat-3e/build/Win64-MinGW-w64/Makefile +++ /dev/null @@ -1,390 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of the SoftFloat IEEE Floating-Point Arithmetic -# Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SPECIALIZE_TYPE ?= 8086-SSE - -SOFTFLOAT_OPTS ?= \ - -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ - -DSOFTFLOAT_FAST_DIV64TO32 - -DELETE = rm -f -C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -COMPILE_C = \ - x86_64-w64-mingw32-gcc -c -Werror-implicit-function-declaration \ - -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -MAKELIB = x86_64-w64-mingw32-ar crs $@ - -OBJ = .o -LIB = .a - -OTHER_HEADERS = $(SOURCE_DIR)/include/opts-GCC.h - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h b/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/addins/SoftFloat-3e/build/Win64-MinGW-w64/platform.h +++ /dev/null @@ -1,54 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define SOFTFLOAT_BUILTIN_CLZ 1 -#define SOFTFLOAT_INTRINSIC_INT128 1 -#include "opts-GCC.h" - diff --git a/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile b/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile deleted file mode 100644 index c5005e6e3..000000000 --- a/addins/SoftFloat-3e/build/template-FAST_INT64/Makefile +++ /dev/null @@ -1,391 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of the SoftFloat IEEE Floating-Point -# Arithmetic Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -# Edit lines marked with `==>'. See "SoftFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SPECIALIZE_TYPE ?= 8086 - -==> SOFTFLOAT_OPTS ?= \ -==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -==> -DSOFTFLOAT_FAST_DIV64TO32 - -==> DELETE = rm -f -==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -==> COMPILE_C = \ -==> cc -c -DSOFTFLOAT_FAST_INT64 $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> MAKELIB = ar crs $@ - -==> OBJ = .o -==> LIB = .a - -==> OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_eq128$(OBJ) \ - s_le128$(OBJ) \ - s_lt128$(OBJ) \ - s_shortShiftLeft128$(OBJ) \ - s_shortShiftRight128$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJam64Extra$(OBJ) \ - s_shortShiftRightJam128$(OBJ) \ - s_shortShiftRightJam128Extra$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJam64Extra$(OBJ) \ - s_shiftRightJam128$(OBJ) \ - s_shiftRightJam128Extra$(OBJ) \ - s_shiftRightJam256M$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_add128$(OBJ) \ - s_add256M$(OBJ) \ - s_sub128$(OBJ) \ - s_sub256M$(OBJ) \ - s_mul64ByShifted32To128$(OBJ) \ - s_mul64To128$(OBJ) \ - s_mul128By32$(OBJ) \ - s_mul128To256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80UIToCommonNaN$(OBJ) \ - s_commonNaNToExtF80UI$(OBJ) \ - s_propagateNaNExtF80UI$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128UIToCommonNaN$(OBJ) \ - s_commonNaNToF128UI$(OBJ) \ - s_propagateNaNF128UI$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_normSubnormalExtF80Sig$(OBJ) \ - s_roundPackToExtF80$(OBJ) \ - s_normRoundPackToExtF80$(OBJ) \ - s_addMagsExtF80$(OBJ) \ - s_subMagsExtF80$(OBJ) \ - s_normSubnormalF128Sig$(OBJ) \ - s_roundPackToF128$(OBJ) \ - s_normRoundPackToF128$(OBJ) \ - s_addMagsF128$(OBJ) \ - s_subMagsF128$(OBJ) \ - s_mulAddF128$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80_to_ui32$(OBJ) \ - extF80_to_ui64$(OBJ) \ - extF80_to_i32$(OBJ) \ - extF80_to_i64$(OBJ) \ - extF80_to_ui32_r_minMag$(OBJ) \ - extF80_to_ui64_r_minMag$(OBJ) \ - extF80_to_i32_r_minMag$(OBJ) \ - extF80_to_i64_r_minMag$(OBJ) \ - extF80_to_f16$(OBJ) \ - extF80_to_f32$(OBJ) \ - extF80_to_f64$(OBJ) \ - extF80_to_f128$(OBJ) \ - extF80_roundToInt$(OBJ) \ - extF80_add$(OBJ) \ - extF80_sub$(OBJ) \ - extF80_mul$(OBJ) \ - extF80_div$(OBJ) \ - extF80_rem$(OBJ) \ - extF80_sqrt$(OBJ) \ - extF80_eq$(OBJ) \ - extF80_le$(OBJ) \ - extF80_lt$(OBJ) \ - extF80_eq_signaling$(OBJ) \ - extF80_le_quiet$(OBJ) \ - extF80_lt_quiet$(OBJ) \ - extF80_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128_to_ui32$(OBJ) \ - f128_to_ui64$(OBJ) \ - f128_to_i32$(OBJ) \ - f128_to_i64$(OBJ) \ - f128_to_ui32_r_minMag$(OBJ) \ - f128_to_ui64_r_minMag$(OBJ) \ - f128_to_i32_r_minMag$(OBJ) \ - f128_to_i64_r_minMag$(OBJ) \ - f128_to_f16$(OBJ) \ - f128_to_f32$(OBJ) \ - f128_to_extF80$(OBJ) \ - f128_to_f64$(OBJ) \ - f128_roundToInt$(OBJ) \ - f128_add$(OBJ) \ - f128_sub$(OBJ) \ - f128_mul$(OBJ) \ - f128_mulAdd$(OBJ) \ - f128_div$(OBJ) \ - f128_rem$(OBJ) \ - f128_sqrt$(OBJ) \ - f128_eq$(OBJ) \ - f128_le$(OBJ) \ - f128_lt$(OBJ) \ - f128_eq_signaling$(OBJ) \ - f128_le_quiet$(OBJ) \ - f128_lt_quiet$(OBJ) \ - f128_isSignalingNaN$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h b/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h deleted file mode 100644 index b63e2a720..000000000 --- a/addins/SoftFloat-3e/build/template-FAST_INT64/platform.h +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "SoftFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile b/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile deleted file mode 100644 index 49fddfd02..000000000 --- a/addins/SoftFloat-3e/build/template-not-FAST_INT64/Makefile +++ /dev/null @@ -1,325 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of the SoftFloat IEEE Floating-Point -# Arithmetic Package, Release 3e, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -# Edit lines marked with `==>'. See "SoftFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SPECIALIZE_TYPE ?= 8086 - -==> SOFTFLOAT_OPTS ?= \ -==> -DSOFTFLOAT_ROUND_ODD -DINLINE_LEVEL=5 -DSOFTFLOAT_FAST_DIV32TO16 \ -==> -DSOFTFLOAT_FAST_DIV64TO32 - -==> DELETE = rm -f -==> C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include -==> COMPILE_C = cc -c $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> MAKELIB = ar crs $@ - -==> OBJ = .o -==> LIB = .a - -==> OTHER_HEADERS = - -.PHONY: all -all: softfloat$(LIB) - -OBJS_PRIMITIVES = \ - s_compare96M$(OBJ) \ - s_compare128M$(OBJ) \ - s_shortShiftLeft64To96M$(OBJ) \ - s_shortShiftLeftM$(OBJ) \ - s_shiftLeftM$(OBJ) \ - s_shortShiftRightM$(OBJ) \ - s_shortShiftRightJam64$(OBJ) \ - s_shortShiftRightJamM$(OBJ) \ - s_shiftRightJam32$(OBJ) \ - s_shiftRightJam64$(OBJ) \ - s_shiftRightJamM$(OBJ) \ - s_shiftRightM$(OBJ) \ - s_countLeadingZeros8$(OBJ) \ - s_countLeadingZeros16$(OBJ) \ - s_countLeadingZeros32$(OBJ) \ - s_countLeadingZeros64$(OBJ) \ - s_addM$(OBJ) \ - s_addCarryM$(OBJ) \ - s_addComplCarryM$(OBJ) \ - s_negXM$(OBJ) \ - s_sub1XM$(OBJ) \ - s_subM$(OBJ) \ - s_mul64To128M$(OBJ) \ - s_mul128MTo256M$(OBJ) \ - s_approxRecip_1Ks$(OBJ) \ - s_approxRecip32_1$(OBJ) \ - s_approxRecipSqrt_1Ks$(OBJ) \ - s_approxRecipSqrt32_1$(OBJ) \ - s_remStepMBy32$(OBJ) \ - -OBJS_SPECIALIZE = \ - softfloat_raiseFlags$(OBJ) \ - s_f16UIToCommonNaN$(OBJ) \ - s_commonNaNToF16UI$(OBJ) \ - s_propagateNaNF16UI$(OBJ) \ - s_f32UIToCommonNaN$(OBJ) \ - s_commonNaNToF32UI$(OBJ) \ - s_propagateNaNF32UI$(OBJ) \ - s_f64UIToCommonNaN$(OBJ) \ - s_commonNaNToF64UI$(OBJ) \ - s_propagateNaNF64UI$(OBJ) \ - extF80M_isSignalingNaN$(OBJ) \ - s_extF80MToCommonNaN$(OBJ) \ - s_commonNaNToExtF80M$(OBJ) \ - s_propagateNaNExtF80M$(OBJ) \ - f128M_isSignalingNaN$(OBJ) \ - s_f128MToCommonNaN$(OBJ) \ - s_commonNaNToF128M$(OBJ) \ - s_propagateNaNF128M$(OBJ) \ - -OBJS_OTHERS = \ - s_roundToUI32$(OBJ) \ - s_roundMToUI64$(OBJ) \ - s_roundToI32$(OBJ) \ - s_roundMToI64$(OBJ) \ - s_normSubnormalF16Sig$(OBJ) \ - s_roundPackToF16$(OBJ) \ - s_normRoundPackToF16$(OBJ) \ - s_addMagsF16$(OBJ) \ - s_subMagsF16$(OBJ) \ - s_mulAddF16$(OBJ) \ - s_normSubnormalF32Sig$(OBJ) \ - s_roundPackToF32$(OBJ) \ - s_normRoundPackToF32$(OBJ) \ - s_addMagsF32$(OBJ) \ - s_subMagsF32$(OBJ) \ - s_mulAddF32$(OBJ) \ - s_normSubnormalF64Sig$(OBJ) \ - s_roundPackToF64$(OBJ) \ - s_normRoundPackToF64$(OBJ) \ - s_addMagsF64$(OBJ) \ - s_subMagsF64$(OBJ) \ - s_mulAddF64$(OBJ) \ - s_tryPropagateNaNExtF80M$(OBJ) \ - s_invalidExtF80M$(OBJ) \ - s_normExtF80SigM$(OBJ) \ - s_roundPackMToExtF80M$(OBJ) \ - s_normRoundPackMToExtF80M$(OBJ) \ - s_addExtF80M$(OBJ) \ - s_compareNonnormExtF80M$(OBJ) \ - s_isNaNF128M$(OBJ) \ - s_tryPropagateNaNF128M$(OBJ) \ - s_invalidF128M$(OBJ) \ - s_shiftNormSigF128M$(OBJ) \ - s_roundPackMToF128M$(OBJ) \ - s_normRoundPackMToF128M$(OBJ) \ - s_addF128M$(OBJ) \ - s_mulAddF128M$(OBJ) \ - softfloat_state$(OBJ) \ - ui32_to_f16$(OBJ) \ - ui32_to_f32$(OBJ) \ - ui32_to_f64$(OBJ) \ - ui32_to_extF80M$(OBJ) \ - ui32_to_f128M$(OBJ) \ - ui64_to_f16$(OBJ) \ - ui64_to_f32$(OBJ) \ - ui64_to_f64$(OBJ) \ - ui64_to_extF80M$(OBJ) \ - ui64_to_f128M$(OBJ) \ - i32_to_f16$(OBJ) \ - i32_to_f32$(OBJ) \ - i32_to_f64$(OBJ) \ - i32_to_extF80M$(OBJ) \ - i32_to_f128M$(OBJ) \ - i64_to_f16$(OBJ) \ - i64_to_f32$(OBJ) \ - i64_to_f64$(OBJ) \ - i64_to_extF80M$(OBJ) \ - i64_to_f128M$(OBJ) \ - f16_to_ui32$(OBJ) \ - f16_to_ui64$(OBJ) \ - f16_to_i32$(OBJ) \ - f16_to_i64$(OBJ) \ - f16_to_ui32_r_minMag$(OBJ) \ - f16_to_ui64_r_minMag$(OBJ) \ - f16_to_i32_r_minMag$(OBJ) \ - f16_to_i64_r_minMag$(OBJ) \ - f16_to_f32$(OBJ) \ - f16_to_f64$(OBJ) \ - f16_to_extF80M$(OBJ) \ - f16_to_f128M$(OBJ) \ - f16_roundToInt$(OBJ) \ - f16_add$(OBJ) \ - f16_sub$(OBJ) \ - f16_mul$(OBJ) \ - f16_mulAdd$(OBJ) \ - f16_div$(OBJ) \ - f16_rem$(OBJ) \ - f16_sqrt$(OBJ) \ - f16_eq$(OBJ) \ - f16_le$(OBJ) \ - f16_lt$(OBJ) \ - f16_eq_signaling$(OBJ) \ - f16_le_quiet$(OBJ) \ - f16_lt_quiet$(OBJ) \ - f16_isSignalingNaN$(OBJ) \ - f32_to_ui32$(OBJ) \ - f32_to_ui64$(OBJ) \ - f32_to_i32$(OBJ) \ - f32_to_i64$(OBJ) \ - f32_to_ui32_r_minMag$(OBJ) \ - f32_to_ui64_r_minMag$(OBJ) \ - f32_to_i32_r_minMag$(OBJ) \ - f32_to_i64_r_minMag$(OBJ) \ - f32_to_f16$(OBJ) \ - f32_to_f64$(OBJ) \ - f32_to_extF80M$(OBJ) \ - f32_to_f128M$(OBJ) \ - f32_roundToInt$(OBJ) \ - f32_add$(OBJ) \ - f32_sub$(OBJ) \ - f32_mul$(OBJ) \ - f32_mulAdd$(OBJ) \ - f32_div$(OBJ) \ - f32_rem$(OBJ) \ - f32_sqrt$(OBJ) \ - f32_eq$(OBJ) \ - f32_le$(OBJ) \ - f32_lt$(OBJ) \ - f32_eq_signaling$(OBJ) \ - f32_le_quiet$(OBJ) \ - f32_lt_quiet$(OBJ) \ - f32_isSignalingNaN$(OBJ) \ - f64_to_ui32$(OBJ) \ - f64_to_ui64$(OBJ) \ - f64_to_i32$(OBJ) \ - f64_to_i64$(OBJ) \ - f64_to_ui32_r_minMag$(OBJ) \ - f64_to_ui64_r_minMag$(OBJ) \ - f64_to_i32_r_minMag$(OBJ) \ - f64_to_i64_r_minMag$(OBJ) \ - f64_to_f16$(OBJ) \ - f64_to_f32$(OBJ) \ - f64_to_extF80M$(OBJ) \ - f64_to_f128M$(OBJ) \ - f64_roundToInt$(OBJ) \ - f64_add$(OBJ) \ - f64_sub$(OBJ) \ - f64_mul$(OBJ) \ - f64_mulAdd$(OBJ) \ - f64_div$(OBJ) \ - f64_rem$(OBJ) \ - f64_sqrt$(OBJ) \ - f64_eq$(OBJ) \ - f64_le$(OBJ) \ - f64_lt$(OBJ) \ - f64_eq_signaling$(OBJ) \ - f64_le_quiet$(OBJ) \ - f64_lt_quiet$(OBJ) \ - f64_isSignalingNaN$(OBJ) \ - extF80M_to_ui32$(OBJ) \ - extF80M_to_ui64$(OBJ) \ - extF80M_to_i32$(OBJ) \ - extF80M_to_i64$(OBJ) \ - extF80M_to_ui32_r_minMag$(OBJ) \ - extF80M_to_ui64_r_minMag$(OBJ) \ - extF80M_to_i32_r_minMag$(OBJ) \ - extF80M_to_i64_r_minMag$(OBJ) \ - extF80M_to_f16$(OBJ) \ - extF80M_to_f32$(OBJ) \ - extF80M_to_f64$(OBJ) \ - extF80M_to_f128M$(OBJ) \ - extF80M_roundToInt$(OBJ) \ - extF80M_add$(OBJ) \ - extF80M_sub$(OBJ) \ - extF80M_mul$(OBJ) \ - extF80M_div$(OBJ) \ - extF80M_rem$(OBJ) \ - extF80M_sqrt$(OBJ) \ - extF80M_eq$(OBJ) \ - extF80M_le$(OBJ) \ - extF80M_lt$(OBJ) \ - extF80M_eq_signaling$(OBJ) \ - extF80M_le_quiet$(OBJ) \ - extF80M_lt_quiet$(OBJ) \ - f128M_to_ui32$(OBJ) \ - f128M_to_ui64$(OBJ) \ - f128M_to_i32$(OBJ) \ - f128M_to_i64$(OBJ) \ - f128M_to_ui32_r_minMag$(OBJ) \ - f128M_to_ui64_r_minMag$(OBJ) \ - f128M_to_i32_r_minMag$(OBJ) \ - f128M_to_i64_r_minMag$(OBJ) \ - f128M_to_f16$(OBJ) \ - f128M_to_f32$(OBJ) \ - f128M_to_f64$(OBJ) \ - f128M_to_extF80M$(OBJ) \ - f128M_roundToInt$(OBJ) \ - f128M_add$(OBJ) \ - f128M_sub$(OBJ) \ - f128M_mul$(OBJ) \ - f128M_mulAdd$(OBJ) \ - f128M_div$(OBJ) \ - f128M_rem$(OBJ) \ - f128M_sqrt$(OBJ) \ - f128M_eq$(OBJ) \ - f128M_le$(OBJ) \ - f128M_lt$(OBJ) \ - f128M_eq_signaling$(OBJ) \ - f128M_le_quiet$(OBJ) \ - f128M_lt_quiet$(OBJ) \ - -OBJS_ALL = $(OBJS_PRIMITIVES) $(OBJS_SPECIALIZE) $(OBJS_OTHERS) - -$(OBJS_ALL): \ - $(OTHER_HEADERS) platform.h $(SOURCE_DIR)/include/primitiveTypes.h \ - $(SOURCE_DIR)/include/primitives.h -$(OBJS_SPECIALIZE) $(OBJS_OTHERS): \ - $(SOURCE_DIR)/include/softfloat_types.h $(SOURCE_DIR)/include/internals.h \ - $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/specialize.h \ - $(SOURCE_DIR)/include/softfloat.h - -$(OBJS_PRIMITIVES) $(OBJS_OTHERS): %$(OBJ): $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c - -$(OBJS_SPECIALIZE): %$(OBJ): $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$(SPECIALIZE_TYPE)/$*.c - -softfloat$(LIB): $(OBJS_ALL) - $(DELETE) $@ - $(MAKELIB) $^ - -.PHONY: clean -clean: - $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h b/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h deleted file mode 100644 index b63e2a720..000000000 --- a/addins/SoftFloat-3e/build/template-not-FAST_INT64/platform.h +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -This C header template is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "SoftFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/SoftFloat-3e/doc/SoftFloat-history.html b/addins/SoftFloat-3e/doc/SoftFloat-history.html deleted file mode 100644 index daa48ca3b..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat-history.html +++ /dev/null @@ -1,258 +0,0 @@ - - - - -Berkeley SoftFloat History - - - - -

History of Berkeley SoftFloat, to Release 3e

- -

-John R. Hauser
-2018 January 20
-

- - -

Release 3e (2018 January)

- -
    - -
  • -Changed the default numeric code for optional rounding mode odd -(round to odd, also known as jamming) from 5 to 6. - -
  • -Modified the behavior of rounding mode odd when rounding to an -integer value (either conversion to an integer format or a -‘roundToInt’ function). -Previously, for those cases only, rounding mode odd acted the same -as rounding to minimum magnitude. -Now all operations are rounded consistently. - -
  • -Fixed some errors in the specialization code modeling Intel x86 floating-point, -specifically the integers returned on invalid operations and the propagation of -NaN payloads in a few rare cases. - -
  • -Added specialization code modeling ARM floating-point, conforming to VFPv2 or -later. - -
  • -Added an example target for ARM processors. - -
  • -Fixed a minor bug whereby function f16_to_ui64 might return a -different integer than expected in the case that the floating-point operand is -negative. - -
  • -Added example target-specific optimization for GCC, employing GCC instrinsics -and support for 128-bit integer arithmetic. - -
  • -Made other minor improvements. - -
- - -

Release 3d (2017 August)

- -
    - -
  • -Fixed bugs in the square root functions for 64-bit -double-precision, 80-bit double-extended-precision, and -128-bit quadruple-precision. -For 64-bit double-precision (f64_sqrt), the result -could sometimes be off by 1 unit in the last place -(1 ulp) from what it should be. -For the larger formats, the square root could be wrong in a large portion of -the less-significant bits. -(A bug in f128_sqrt was first reported by Alexei Sibidanov.) - -
- - -

Release 3c (2017 February)

- -
    - -
  • -Added optional rounding mode odd (round to odd, also known as -jamming). - -
  • -Corrected the documentation concerning non-canonical representations in -80-bit double-extended-precision. - -
- - -

Release 3b (2016 July)

- -
    - -
  • -Implemented the common 16-bit “half-precision” -floating-point format (float16_t). - -
  • -Made the integer values returned on invalid conversions to integer formats -be determined by the port-specific specialization instead of being the same for -all ports. - -
  • -Added preprocessor macro THREAD_LOCAL to allow the floating-point -state (modes and exception flags) to be made per-thread. - -
  • -Modified the provided Makefiles to allow some options to be overridden from the -make command. - -
  • -Made other minor improvements. - -
- - -

Release 3a (2015 October)

- -
    - -
  • -Replaced the license text supplied by the University of California, Berkeley. - -
- - -

Release 3 (2015 February)

- -
    - -
  • -Complete rewrite, funded by the University of California, Berkeley, and -consequently having a different use license than earlier releases. -Major changes included renaming most types and functions, upgrading some -algorithms, restructuring the source files, and making SoftFloat into a true -library. - -
  • -Added functions to convert between floating-point and unsigned integers, both -32-bit and 64-bit (uint32_t and -uint64_t). - -
  • -Added functions for fused multiply-add, for all supported floating-point -formats except 80-bit double-extended-precision. - -
  • -Added support for a fifth rounding mode, near_maxMag (round to -nearest, with ties to maximum magnitude, away from zero). - -
  • -Dropped the timesoftfloat program (now part of the Berkeley -TestFloat package). - -
- - -

Release 2c (2015 January)

- -
    - -
  • -Fixed mistakes affecting some 64-bit processors. - -
  • -Further improved the documentation and the wording for the legal restrictions -on using SoftFloat releases through 2c (not applicable to -Release 3 or later). - -
- - -

Release 2b (2002 May)

- -
    - -
  • -Made minor updates to the documentation, including improved wording for the -legal restrictions on using SoftFloat. - -
- - -

Release 2a (1998 December)

- -
    - -
  • -Added functions to convert between 64-bit integers -(int64) and all supported floating-point formats. - -
  • -Fixed a bug in all 64-bit-version square root functions except -float32_sqrt that caused the result sometimes to be off by -1 unit in the last place (1 ulp) from what it should -be. -(Bug discovered by Paul Donahue.) - -
  • -Improved the Makefiles. -
- - -

Release 2 (1997 June)

- -
    - -
  • -Created the 64-bit (bits64) version, adding the -floatx80 and float128 formats. - -
  • -Changed the source directory structure, splitting the sources into a -bits32 and a bits64 version. -Renamed environment.h to milieu.h to avoid confusion -with environment variables. - -
  • -Fixed a small error that caused float64_round_to_int often to -round the wrong way in nearest/even mode when the operand was between -220 and 221 and halfway between two integers. - -
- - -

Release 1a (1996 July)

- -
    - -
  • -Corrected a mistake that caused borderline underflow cases not to raise the -underflow flag when they should have. -(Problem reported by Doug Priest.) - -
  • -Added the float_detect_tininess variable to control whether -tininess is detected before or after rounding. - -
- - -

Release 1 (1996 July)

- -
    - -
  • -Original release, based on work done for the International Computer Science -Institute (ICSI) in Berkeley, California. - -
- - - - diff --git a/addins/SoftFloat-3e/doc/SoftFloat-source.html b/addins/SoftFloat-3e/doc/SoftFloat-source.html deleted file mode 100644 index d4b85f7b0..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat-source.html +++ /dev/null @@ -1,686 +0,0 @@ - - - - -Berkeley SoftFloat Source Documentation - - - - -

Berkeley SoftFloat Release 3e: Source Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. SoftFloat Package Directory Structure
5. Issues for Porting SoftFloat to a New Target
5.1. Standard Headers <stdbool.h> and - <stdint.h>
5.2. Specializing Floating-Point Behavior
5.3. Macros for Build Options
5.4. Adapting a Template Target Directory
5.5. Target-Specific Optimization of Primitive Functions
6. Testing SoftFloat
7. Providing SoftFloat as a Common Library for Applications
8. Contact Information
-
- - -

1. Introduction

- -

-This document gives information needed for compiling and/or porting Berkeley -SoftFloat, a library of C functions implementing binary floating-point -conforming to the IEEE Standard for Floating-Point Arithmetic. -For basic documentation about SoftFloat refer to -SoftFloat.html. -

- -

-The source code for SoftFloat is intended to be relatively machine-independent -and should be compilable with any ISO-Standard C compiler that also supports -64-bit integers. -SoftFloat has been successfully compiled with the GNU C Compiler -(gcc) for several platforms. -

- -

-Release 3 of SoftFloat was a complete rewrite relative to -Release 2 or earlier. -Changes to the interface of SoftFloat functions are documented in -SoftFloat.html. -The current version of SoftFloat is Release 3e. -

- - -

2. Limitations

- -

-SoftFloat assumes the computer has an addressable byte size of either 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-SoftFloat is written in C and is designed to work with other C code. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of SoftFloat included implementations of 32-bit -single-precision and 64-bit double-precision floating-point that -did not require 64-bit integers, but this option is not supported -starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-C Standard header files <stdbool.h> and -<stdint.h> are required for defining standard Boolean and -integer types. -If these headers are not supplied with the C compiler, minimal substitutes must -be provided. -SoftFloat’s dependence on these headers is detailed later in -section 5.1, Standard Headers <stdbool.h> -and <stdint.h>. -

- - -

3. Acknowledgments and License

- -

-The SoftFloat package was written by me, John R. Hauser. -Release 3 of SoftFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of SoftFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. -All rights reserved. -

- -

-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -

    - -
  1. -

    -Redistributions of source code must retain the above copyright notice, this -list of conditions, and the following disclaimer. -

    - -
  2. -

    -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions, and the following disclaimer in the documentation and/or -other materials provided with the distribution. -

    - -
  3. -

    -Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. -

    - -
-

- -

-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS”, -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. -IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

- - -

4. SoftFloat Package Directory Structure

- -

-Because SoftFloat is targeted to multiple platforms, its source code is -slightly scattered between target-specific and target-independent directories -and files. -The supplied directory structure is as follows: -

-
-doc
-source
-    include
-    8086
-    8086-SSE
-    ARM-VFPv2
-    ARM-VFPv2-defaultNaN
-build
-    template-FAST_INT64
-    template-not-FAST_INT64
-    Linux-386-GCC
-    Linux-386-SSE2-GCC
-    Linux-x86_64-GCC
-    Linux-ARM-VFPv2-GCC
-    Win32-MinGW
-    Win32-SSE2-MinGW
-    Win64-MinGW-w64
-
-
-The majority of the SoftFloat sources are provided in the source -directory. -The include subdirectory contains several header files -(unsurprisingly), while the other subdirectories of source contain -source files that specialize the floating-point behavior to match particular -processor families: -
-
-
8086
-
-Intel’s older, 8087-derived floating-point, extended to all supported -floating-point types -
-
8086-SSE
-
-Intel’s x86 processors with Streaming SIMD Extensions (SSE) and later -compatible extensions, having 8087 behavior for 80-bit -double-extended-precision (extFloat80_t) and SSE behavior for -other floating-point types -
-
ARM-VFPv2
-
-ARM’s VFPv2 or later floating-point, with NaN payload propagation -
-
ARM-VFPv2-defaultNaN
-
-ARM’s VFPv2 or later floating-point, with the “default NaN” -option -
-
-
-If other specializations are attempted, these would be expected to be other -subdirectories of source alongside the ones listed above. -Specialization is covered later, in section 5.2, Specializing -Floating-Point Behavior. -

- -

-The build directory is intended to contain a subdirectory for each -target platform for which a build of the SoftFloat library may be created. -For each build target, the target’s subdirectory is where all derived -object files and the completed SoftFloat library (typically -softfloat.a or libsoftfloat.a) are created. -The two template subdirectories are not actual build targets but -contain sample files for creating new target directories. -(The meaning of FAST_INT64 will be explained later.) -

- -

-Ignoring the template directories, the supplied target directories -are intended to follow a naming system of -<execution-environment>-<compiler>. -For the example targets, -<execution-environment> is -Linux-386, Linux-386-SSE2, -Linux-x86_64, -Linux-ARM-VFPv2, Win32, -Win32-SSE2, or Win64, and -<compiler> is GCC, -MinGW, or MinGW-w64. -

- -

-All of the supplied target directories are merely examples that may or may not -be correct for compiling on any particular system. -Despite requests, there are currently no plans to include and maintain in the -SoftFloat package the build files needed for a great many users’ -compilation environments, which can span a huge range of operating systems, -compilers, and other tools. -

- -

-As supplied, each target directory contains two files: -

-
-Makefile
-platform.h
-
-
-The provided Makefile is written for GNU make. -A build of SoftFloat for the specific target is begun by executing the -make command with the target directory as the current directory. -A completely different build tool can be used if an appropriate -Makefile equivalent is created. -

- -

-The platform.h header file exists to provide a location for -additional C declarations specific to the build target. -Every C source file of SoftFloat contains a #include for -platform.h. -In many cases, the contents of platform.h can be as simple as one -or two lines of code. -At the other extreme, to get maximal performance from SoftFloat, it may be -desirable to include in header platform.h (directly or via -#include) declarations for numerous target-specific optimizations. -Such possibilities are discussed in the next section, Issues for Porting -SoftFloat to a New Target. -If the target’s compiler or library has bugs or other shortcomings, -workarounds for these issues may also be possible with target-specific -declarations in platform.h, avoiding the need to modify the main -SoftFloat sources. -

- - -

5. Issues for Porting SoftFloat to a New Target

- -

5.1. Standard Headers <stdbool.h> and <stdint.h>

- -

-The SoftFloat sources make use of standard headers -<stdbool.h> and <stdint.h>, which have -been part of the ISO C Standard Library since 1999. -With any recent compiler, these standard headers are likely to be supported, -even if the compiler does not claim complete conformance to the latest ISO C -Standard. -For older or nonstandard compilers, substitutes for -<stdbool.h> and <stdint.h> may need to be -created. -SoftFloat depends on these names from <stdbool.h>: -

-
-bool
-true
-false
-
-
-and on these names from <stdint.h>: -
-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-UINT64_C
-INT64_C
-uint_least8_t
-uint_fast8_t
-uint_fast16_t
-uint_fast32_t
-uint_fast64_t
-int_fast8_t
-int_fast16_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

5.2. Specializing Floating-Point Behavior

- -

-The IEEE Floating-Point Standard allows for some flexibility in a conforming -implementation, particularly concerning NaNs. -The SoftFloat source directory is supplied with some -specialization subdirectories containing possible definitions for this -implementation-specific behavior. -For example, the 8086 and 8086-SSE -subdirectories have source files that specialize SoftFloat’s behavior to -match that of Intel’s x86 line of processors. -The files in a specialization subdirectory must determine: -

    -
  • -whether tininess for underflow is detected before or after rounding by default; -
  • -how signaling NaNs are distinguished from quiet NaNs; -
  • -what (if anything) special happens when exceptions are raised; -
  • -the default generated quiet NaNs; -
  • -how NaNs are propagated from function inputs to output; and -
  • -the integer results returned when conversions to integer type raise the -invalid exception. -
-

- -

-As provided, the build process for a target expects to involve exactly -one specialization directory that defines all of these -implementation-specific details for the target. -A specialization directory such as 8086 is expected to contain a -header file called specialize.h, together with whatever other -source files are needed to complete the specialization. -

- -

-A new build target may use an existing specialization, such as the ones -provided by the 8086 and 8086-SSE -subdirectories. -If a build target needs a new specialization, different from any existing ones, -it is recommended that a new specialization directory be created for this -purpose. -The specialize.h header file from any of the provided -specialization subdirectories can be used as a model for what definitions are -needed. -

- - -

5.3. Macros for Build Options

- -

-The SoftFloat source files adapt the floating-point implementation according to -several C preprocessor macros: -

-
-
LITTLEENDIAN -
-Must be defined for little-endian machines; must not be defined for big-endian -machines. -
INLINE -
-Specifies the sequence of tokens used to indicate that a C function should be -inlined. -If macro INLINE_LEVEL is defined with a value of 1 or higher, this -macro must be defined; otherwise, this macro is ignored and need not be -defined. -For compilers that conform to the C Standard’s rules for inline -functions, this macro can be defined as the single keyword inline. -For other compilers that follow a convention pre-dating the standardization of -inline, this macro may need to be defined to extern -inline. -
THREAD_LOCAL -
-Can be defined to a sequence of tokens that, when appearing at the start of a -variable declaration, indicates to the C compiler that the variable is -per-thread, meaning that each execution thread gets its own separate -instance of the variable. -This macro is used in header softfloat.h in the declarations of -variables softfloat_roundingMode, -softfloat_detectTininess, extF80_roundingPrecision, -and softfloat_exceptionFlags. -If macro THREAD_LOCAL is left undefined, these variables will -default to being ordinary global variables. -Depending on the compiler, possible valid definitions of this macro include -_Thread_local and __thread. -
-
-
SOFTFLOAT_ROUND_ODD -
-Can be defined to enable support for optional rounding mode -softfloat_round_odd. -
-
-
INLINE_LEVEL -
-Can be defined to an integer to determine the degree of inlining requested of -the compiler. -Larger numbers request that more inlining be done. -If this macro is not defined or is defined to a value less than 1 -(zero or negative), no inlining is requested. -The maximum effective value is no higher than 5. -Defining this macro to a value greater than 5 is the same as defining it -to 5. -
SOFTFLOAT_FAST_INT64 -
-Can be defined to indicate that the build target’s implementation of -64-bit arithmetic is efficient. -For newer 64-bit processors, this macro should usually be defined. -For very small microprocessors whose buses and registers are 8-bit -or 16-bit in size, this macro should usually not be defined. -Whether this macro should be defined for a 32-bit processor may -depend on the target machine and the applications that will use SoftFloat. -
SOFTFLOAT_FAST_DIV32TO16 -
-Can be defined to indicate that the target’s division operator -in C (written as /) is reasonably efficient for -dividing a 32-bit unsigned integer by a 16-bit -unsigned integer. -Setting this macro may affect the performance of function f16_div. -
SOFTFLOAT_FAST_DIV64TO32 -
-Can be defined to indicate that the target’s division operator -in C (written as /) is reasonably efficient for -dividing a 64-bit unsigned integer by a 32-bit -unsigned integer. -Setting this macro may affect the performance of division, remainder, and -square root operations other than f16_div. -
-
-

- -

-Following the usual custom for C, for most of these macros (all -except INLINE, THREAD_LOCAL, and -INLINE_LEVEL), the content of any definition is irrelevant; -what matters is a macro’s effect on #ifdef directives. -

- -

-It is recommended that any definitions of macros LITTLEENDIAN, -INLINE, and THREAD_LOCAL be made in a build -target’s platform.h header file, because these macros are -expected to be determined inflexibly by the target machine and compiler. -The other five macros select options and control optimization, and thus might -be better located in the target’s Makefile (or its equivalent). -

- - -

5.4. Adapting a Template Target Directory

- -

-In the build directory, two template subdirectories -provide models for new target directories. -Two different templates exist because different functions are needed in the -SoftFloat library depending on whether macro SOFTFLOAT_FAST_INT64 -is defined. -If macro SOFTFLOAT_FAST_INT64 will be defined, -template-FAST_INT64 is the template to use; -otherwise, template-not-FAST_INT64 is the appropriate -template. -A new target directory can be created by copying the correct template directory -and editing the files inside. -To avoid confusion, it would be wise to refrain from editing the files within a -template directory directly. -

- - -

5.5. Target-Specific Optimization of Primitive Functions

- -

-Header file primitives.h (in directory -source/include) declares macros and functions for numerous -underlying arithmetic operations upon which many of SoftFloat’s -floating-point functions are ultimately built. -The SoftFloat sources include implementations of all of these functions/macros, -written as standard C code, so a complete and correct SoftFloat library can be -created using only the supplied code for all functions. -However, for many targets, SoftFloat’s performance can be improved by -substituting target-specific implementations of some of the functions/macros -declared in primitives.h. -

- -

-For example, primitives.h declares a function called -softfloat_countLeadingZeros32 that takes an unsigned -32-bit integer as an argument and returns the number of the -integer’s most-significant bits that are zeros. -While the SoftFloat sources include an implementation of this function written -in standard C, many processors can perform this same function -directly in only one or two machine instructions. -An alternative, target-specific implementation that maps to those instructions -is likely to be more efficient than the generic C code from the SoftFloat -package. -

- -

-A build target can replace the supplied version of any function or macro of -primitives.h by defining a macro with the same name in the -target’s platform.h header file. -For this purpose, it may be helpful for platform.h to -#include header file primitiveTypes.h, which defines -types used for arguments and results of functions declared in -primitives.h. -When a desired replacement implementation is a function, not a macro, it is -sufficient for platform.h to include the line -

-
-#define <function-name> <function-name>
-
-
-where <function-name> is the name of the -function. -This technically defines <function-name> -as a macro, but one that resolves to the same name, which may then be a -function. -(A preprocessor that conforms to the C Standard is required to limit recursive -macro expansion from being applied more than once.) -

- -

-The supplied header file opts-GCC.h (in directory -source/include) provides an example of target-specific -optimization for the GCC compiler. -Each GCC target example in the build directory has -

-#include "opts-GCC.h" -
-in its platform.h header file. -Before opts-GCC.h is included, the following macros must be -defined (or not) to control which features are invoked: -
-
-
SOFTFLOAT_BUILTIN_CLZ
-
-If defined, SoftFloat’s internal -‘countLeadingZeros’ functions use intrinsics -__builtin_clz and __builtin_clzll. -
-
SOFTFLOAT_INTRINSIC_INT128
-
-If defined, SoftFloat makes use of GCC’s nonstandard 128-bit -integer type __int128. -
-
-
-On some machines, these improvements are observed to increase the speeds of -f64_mul and f128_mul by around 20 to 25%, although -other functions receive less dramatic boosts, or none at all. -Results can vary greatly across different platforms. -

- - -

6. Testing SoftFloat

- -

-SoftFloat can be tested using the testsoftfloat program by the -same author. -This program is part of the Berkeley TestFloat package available at the Web -page -http://www.jhauser.us/arithmetic/TestFloat.html. -The TestFloat package also has a program called timesoftfloat that -measures the speed of SoftFloat’s floating-point functions. -

- - -

7. Providing SoftFloat as a Common Library for Applications

- -

-Header file softfloat.h defines the SoftFloat interface as seen by -clients. -If the SoftFloat library will be made a common library for programs on a -system, the supplied softfloat.h has a couple of deficiencies for -this purpose: -

    -
  • -As supplied, softfloat.h depends on another header, -softfloat_types.h, that is not intended for public use but which -must also be visible to the programmer’s compiler. -
  • -More troubling, at the time softfloat.h is included in a C source -file, macros SOFTFLOAT_FAST_INT64 and THREAD_LOCAL -must be defined, or not defined, consistent with how these macro were defined -when the SoftFloat library was built. -
-In the situation that new programs may regularly #include header -file softfloat.h, it is recommended that a custom, self-contained -version of this header file be created that eliminates these issues. -

- - -

8. Contact Information

- -

-At the time of this writing, the most up-to-date information about SoftFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - - - diff --git a/addins/SoftFloat-3e/doc/SoftFloat.html b/addins/SoftFloat-3e/doc/SoftFloat.html deleted file mode 100644 index bb41770ec..000000000 --- a/addins/SoftFloat-3e/doc/SoftFloat.html +++ /dev/null @@ -1,1527 +0,0 @@ - - - - -Berkeley SoftFloat Library Interface - - - - -

Berkeley SoftFloat Release 3e: Library Interface

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. Types and Functions
4.1. Boolean and Integer Types
4.2. Floating-Point Types
4.3. Supported Floating-Point Functions
4.4. Non-canonical Representations in extFloat80_t
4.5. Conventions for Passing Arguments and Results
5. Reserved Names
6. Mode Variables
6.1. Rounding Mode
6.2. Underflow Detection
6.3. Rounding Precision for the 80-Bit Extended Format
7. Exceptions and Exception Flags
8. Function Details
8.1. Conversions from Integer to Floating-Point
8.2. Conversions from Floating-Point to Integer
8.3. Conversions Among Floating-Point Types
8.4. Basic Arithmetic Functions
8.5. Fused Multiply-Add Functions
8.6. Remainder Functions
8.7. Round-to-Integer Functions
8.8. Comparison Functions
8.9. Signaling NaN Test Functions
8.10. Raise-Exception Function
9. Changes from SoftFloat Release 2
9.1. Name Changes
9.2. Changes to Function Arguments
9.3. Added Capabilities
9.4. Better Compatibility with the C Language
9.5. New Organization as a Library
9.6. Optimization Gains (and Losses)
10. Future Directions
11. Contact Information
-
- - -

1. Introduction

- -

-Berkeley SoftFloat is a software implementation of binary floating-point that -conforms to the IEEE Standard for Floating-Point Arithmetic. -The current release supports five binary formats: 16-bit -half-precision, 32-bit single-precision, 64-bit -double-precision, 80-bit double-extended-precision, and -128-bit quadruple-precision. -The following functions are supported for each format: -

    -
  • -addition, subtraction, multiplication, division, and square root; -
  • -fused multiply-add as defined by the IEEE Standard, except for -80-bit double-extended-precision; -
  • -remainder as defined by the IEEE Standard; -
  • -round to integral value; -
  • -comparisons; -
  • -conversions to/from other supported formats; and -
  • -conversions to/from 32-bit and 64-bit integers, -signed and unsigned. -
-All operations required by the original 1985 version of the IEEE Floating-Point -Standard are implemented, except for conversions to and from decimal. -

- -

-This document gives information about the types defined and the routines -implemented by SoftFloat. -It does not attempt to define or explain the IEEE Floating-Point Standard. -Information about the standard is available elsewhere. -

- -

-The current version of SoftFloat is Release 3e. -This release modifies the behavior of the rarely used odd rounding mode -(round to odd, also known as jamming), and also adds some new -specialization and optimization examples for those compiling SoftFloat. -

- -

-The previous Release 3d fixed bugs that were found in the square -root functions for the 64-bit, 80-bit, and -128-bit floating-point formats. -(Thanks to Alexei Sibidanov at the University of Victoria for reporting an -incorrect result.) -The bugs affected all prior Release-3 versions of SoftFloat -through 3c. -The flaw in the 64-bit floating-point square root function was of -very minor impact, causing a 1-ulp error (1 unit in -the last place) a few times out of a billion. -The bugs in the 80-bit and 128-bit square root -functions were more serious. -Although incorrect results again occurred only a few times out of a billion, -when they did occur a large portion of the less-significant bits could be -wrong. -

- -

-Among earlier releases, 3b was notable for adding support for the -16-bit half-precision format. -For more about the evolution of SoftFloat releases, see -SoftFloat-history.html. -

- -

-The functional interface of SoftFloat Release 3 and later differs -in many details from the releases that came before. -For specifics of these differences, see section 9 below, -Changes from SoftFloat Release 2. -

- - -

2. Limitations

- -

-SoftFloat assumes the computer has an addressable byte size of 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-SoftFloat is written in C and is designed to work with other C code. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of SoftFloat included implementations of 32-bit -single-precision and 64-bit double-precision floating-point that -did not require 64-bit integers, but this option is not supported -starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-Most operations not required by the original 1985 version of the IEEE -Floating-Point Standard but added in the 2008 version are not yet supported in -SoftFloat Release 3e. -

- - -

3. Acknowledgments and License

- -

-The SoftFloat package was written by me, John R. Hauser. -Release 3 of SoftFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of SoftFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. -All rights reserved. -

- -

-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -

    - -
  1. -

    -Redistributions of source code must retain the above copyright notice, this -list of conditions, and the following disclaimer. -

    - -
  2. -

    -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions, and the following disclaimer in the documentation and/or -other materials provided with the distribution. -

    - -
  3. -

    -Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. -

    - -
-

- -

-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS”, -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. -IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

- - -

4. Types and Functions

- -

-The types and functions of SoftFloat are declared in header file -softfloat.h. -

- -

4.1. Boolean and Integer Types

- -

-Header file softfloat.h depends on standard headers -<stdbool.h> and <stdint.h> to define type -bool and several integer types. -These standard headers have been part of the ISO C Standard Library since 1999. -With any recent compiler, they are likely to be supported, even if the compiler -does not claim complete conformance to the latest ISO C Standard. -For older or nonstandard compilers, a port of SoftFloat may have substitutes -for these headers. -Header softfloat.h depends only on the name bool from -<stdbool.h> and on these type names from -<stdint.h>: -

-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-uint_fast8_t
-uint_fast32_t
-uint_fast64_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

4.2. Floating-Point Types

- -

-The softfloat.h header defines five floating-point types: -

- - - - - - - - - - - - - - - - - - - - - -
float16_t16-bit half-precision binary format
float32_t32-bit single-precision binary format
float64_t64-bit double-precision binary format
extFloat80_t   80-bit double-extended-precision binary format (old Intel or -Motorola format)
float128_t128-bit quadruple-precision binary format
-
-The non-extended types are each exactly the size specified: -16 bits for float16_t, 32 bits for -float32_t, 64 bits for float64_t, and -128 bits for float128_t. -Aside from these size requirements, the definitions of all these types may -differ for different ports of SoftFloat to specific systems. -A given port of SoftFloat may or may not define some of the floating-point -types as aliases for the C standard types float, -double, and long double. -

- -

-Header file softfloat.h also defines a structure, -struct extFloat80M, for the representation of -80-bit double-extended-precision floating-point values in memory. -This structure is the same size as type extFloat80_t and contains -at least these two fields (not necessarily in this order): -

-
-uint16_t signExp;
-uint64_t signif;
-
-
-Field signExp contains the sign and exponent of the floating-point -value, with the sign in the most significant bit (bit 15) and the -encoded exponent in the other 15 bits. -Field signif is the complete 64-bit significand of -the floating-point value. -(In the usual encoding for 80-bit extended floating-point, the -leading 1 bit of normalized numbers is not implicit but is stored -in the most significant bit of the significand.) -

- -

4.3. Supported Floating-Point Functions

- -

-SoftFloat implements these arithmetic operations for its floating-point types: -

    -
  • -conversions between any two floating-point formats; -
  • -for each floating-point format, conversions to and from signed and unsigned -32-bit and 64-bit integers; -
  • -for each format, the usual addition, subtraction, multiplication, division, and -square root operations; -
  • -for each format except extFloat80_t, the fused multiply-add -operation defined by the IEEE Standard; -
  • -for each format, the floating-point remainder operation defined by the IEEE -Standard; -
  • -for each format, a “round to integer” operation that rounds to the -nearest integer value in the same format; and -
  • -comparisons between two values in the same floating-point format. -
-

- -

-The following operations required by the 2008 IEEE Floating-Point Standard are -not supported in SoftFloat Release 3e: -

    -
  • -nextUp, nextDown, minNum, maxNum, minNumMag, -maxNumMag, scaleB, and logB; -
  • -conversions between floating-point formats and decimal or hexadecimal character -sequences; -
  • -all “quiet-computation” operations (copy, negate, -abs, and copySign, which all involve only simple copying and/or -manipulation of the floating-point sign bit); and -
  • -all “non-computational” operations other than isSignaling -(which is supported). -
-

- -

4.4. Non-canonical Representations in extFloat80_t

- -

-Because the 80-bit double-extended-precision format, -extFloat80_t, stores an explicit leading significand bit, many -finite floating-point numbers are encodable in this type in multiple equivalent -forms. -Of these multiple encodings, there is always a unique one with the least -encoded exponent value, and this encoding is considered the canonical -representation of the floating-point number. -Any other equivalent representations (having a higher encoded exponent value) -are non-canonical. -For a value in the subnormal range (including zero), the canonical -representation always has an encoded exponent of zero and a leading significand -bit of 0. -For finite values outside the subnormal range, the canonical representation -always has an encoded exponent that is nonzero and a leading significand bit -of 1. -

- -

-For an infinity or NaN, the leading significand bit is similarly expected to -be 1. -An infinity or NaN with a leading significand bit of 0 is again -considered non-canonical. -Hence, altogether, to be canonical, a value of type extFloat80_t -must have a leading significand bit of 1, unless the value is -subnormal or zero, in which case the leading significand bit and the encoded -exponent must both be zero. -

- -

-SoftFloat’s functions are not guaranteed to operate as expected when -inputs of type extFloat80_t are non-canonical. -Assuming all of a function’s extFloat80_t inputs (if any) -are canonical, function outputs of type extFloat80_t will always -be canonical. -

- -

4.5. Conventions for Passing Arguments and Results

- -

-Values that are at most 64 bits in size (i.e., not the -80-bit or 128-bit floating-point formats) are in all -cases passed as function arguments by value. -Likewise, when an output of a function is no more than 64 bits, it -is always returned directly as the function result. -Thus, for example, the SoftFloat function for adding two 64-bit -floating-point values has this simple signature: -

-float64_t f64_add( float64_t, float64_t ); -
-

- -

-The story is more complex when function inputs and outputs are -80-bit and 128-bit floating-point. -For these types, SoftFloat always provides a function that passes these larger -values into or out of the function indirectly, via pointers. -For example, for adding two 128-bit floating-point values, -SoftFloat supplies this function: -

-void f128M_add( const float128_t *, const float128_t *, float128_t * ); -
-The first two arguments point to the values to be added, and the last argument -points to the location where the sum will be stored. -The M in the name f128M_add is mnemonic for the fact -that the 128-bit inputs and outputs are “in memory”, -pointed to by pointer arguments. -

- -

-All ports of SoftFloat implement these pass-by-pointer functions for -types extFloat80_t and float128_t. -At the same time, SoftFloat ports may also implement alternate versions of -these same functions that pass extFloat80_t and -float128_t by value, like the smaller formats. -Thus, besides the function with name f128M_add shown above, a -SoftFloat port may also supply an equivalent function with this signature: -

-float128_t f128_add( float128_t, float128_t ); -
-

- -

-As a general rule, on computers where the machine word size is -32 bits or smaller, only the pass-by-pointer versions of functions -(e.g., f128M_add) are provided for types extFloat80_t -and float128_t, because passing such large types directly can have -significant extra cost. -On computers where the word size is 64 bits or larger, both -function versions (f128M_add and f128_add) are -provided, because the cost of passing by value is then more reasonable. -Applications that must be portable accross both classes of computers must use -the pointer-based functions, as these are always implemented. -However, if it is known that SoftFloat includes the by-value functions for all -platforms of interest, programmers can use whichever version they prefer. -

- - -

5. Reserved Names

- -

-In addition to the variables and functions documented here, SoftFloat defines -some symbol names for its own private use. -These private names always begin with the prefix -‘softfloat_’. -When a program includes header softfloat.h or links with the -SoftFloat library, all names with prefix ‘softfloat_’ -are reserved for possible use by SoftFloat. -Applications that use SoftFloat should not define their own names with this -prefix, and should reference only such names as are documented. -

- - -

6. Mode Variables

- -

-The following global variables control rounding mode, underflow detection, and -the 80-bit extended format’s rounding precision: -

-softfloat_roundingMode
-softfloat_detectTininess
-extF80_roundingPrecision -
-These mode variables are covered in the next several subsections. -For some SoftFloat ports, these variables may be per-thread (declared -thread_local), meaning that different execution threads have their -own separate copies of the variables. -

- -

6.1. Rounding Mode

- -

-All five rounding modes defined by the 2008 IEEE Floating-Point Standard are -implemented for all operations that require rounding. -Some ports of SoftFloat may also implement the round-to-odd mode. -

- -

-The rounding mode is selected by the global variable -

-uint_fast8_t softfloat_roundingMode; -
-This variable may be set to one of the values -
- - - - - - - - - - - - - - - - - - - - - - - - - -
softfloat_round_near_evenround to nearest, with ties to even
softfloat_round_near_maxMag  round to nearest, with ties to maximum magnitude (away from zero)
softfloat_round_minMaground to minimum magnitude (toward zero)
softfloat_round_minround to minimum (down)
softfloat_round_maxround to maximum (up)
softfloat_round_oddround to odd (jamming), if supported by the SoftFloat port
-
-Variable softfloat_roundingMode is initialized to -softfloat_round_near_even. -

- -

-When softfloat_round_odd is the rounding mode for a function that -rounds to an integer value (either conversion to an integer format or a -‘roundToInt’ function), if the input is not already an -integer, the rounded result is the closest odd integer. -For other operations, this rounding mode acts as though the floating-point -result is first rounded to minimum magnitude, the same as -softfloat_round_minMag, and then, if the result is inexact, the -least-significant bit of the result is set to 1. -Rounding to odd is also known as jamming. -

- -

6.2. Underflow Detection

- -

-In the terminology of the IEEE Standard, SoftFloat can detect tininess for -underflow either before or after rounding. -The choice is made by the global variable -

-uint_fast8_t softfloat_detectTininess; -
-which can be set to either -
-softfloat_tininess_beforeRounding
-softfloat_tininess_afterRounding -
-Detecting tininess after rounding is usually better because it results in fewer -spurious underflow signals. -The other option is provided for compatibility with some systems. -Like most systems (and as required by the newer 2008 IEEE Standard), SoftFloat -always detects loss of accuracy for underflow as an inexact result. -

- -

6.3. Rounding Precision for the 80-Bit Extended Format

- -

-For extFloat80_t only, the rounding precision of the basic -arithmetic operations is controlled by the global variable -

-uint_fast8_t extF80_roundingPrecision; -
-The operations affected are: -
-extF80_add
-extF80_sub
-extF80_mul
-extF80_div
-extF80_sqrt -
-When extF80_roundingPrecision is set to its default value of 80, -these operations are rounded to the full precision of the 80-bit -double-extended-precision format, like occurs for other formats. -Setting extF80_roundingPrecision to 32 or to 64 causes the -operations listed to be rounded to 32-bit precision (equivalent to -float32_t) or to 64-bit precision (equivalent to -float64_t), respectively. -When rounding to reduced precision, additional bits in the result significand -beyond the rounding point are set to zero. -The consequences of setting extF80_roundingPrecision to a value -other than 32, 64, or 80 is not specified. -Operations other than the ones listed above are not affected by -extF80_roundingPrecision. -

- - -

7. Exceptions and Exception Flags

- -

-All five exception flags required by the IEEE Floating-Point Standard are -implemented. -Each flag is stored as a separate bit in the global variable -

-uint_fast8_t softfloat_exceptionFlags; -
-The positions of the exception flag bits within this variable are determined by -the bit masks -
-softfloat_flag_inexact
-softfloat_flag_underflow
-softfloat_flag_overflow
-softfloat_flag_infinite
-softfloat_flag_invalid -
-Variable softfloat_exceptionFlags is initialized to all zeros, -meaning no exceptions. -

- -

-For some SoftFloat ports, softfloat_exceptionFlags may be -per-thread (declared thread_local), meaning that different -execution threads have their own separate instances of it. -

- -

-An individual exception flag can be cleared with the statement -

-softfloat_exceptionFlags &= ~softfloat_flag_<exception>; -
-where <exception> is the appropriate name. -To raise a floating-point exception, function softfloat_raiseFlags -should normally be used. -

- -

-When SoftFloat detects an exception other than inexact, it calls -softfloat_raiseFlags. -The default version of this function simply raises the corresponding exception -flags. -Particular ports of SoftFloat may support alternate behavior, such as exception -traps, by modifying the default softfloat_raiseFlags. -A program may also supply its own softfloat_raiseFlags function to -override the one from the SoftFloat library. -

- -

-Because inexact results occur frequently under most circumstances (and thus are -hardly exceptional), SoftFloat does not ordinarily call -softfloat_raiseFlags for inexact exceptions. -It does always raise the inexact exception flag as required. -

- - -

8. Function Details

- -

-In this section, <float> appears in function names as -a substitute for one of these abbreviations: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
f16indicates float16_t, passed by value
f32indicates float32_t, passed by value
f64indicates float64_t, passed by value
extF80M   indicates extFloat80_t, passed indirectly via pointers
extF80indicates extFloat80_t, passed by value
f128Mindicates float128_t, passed indirectly via pointers
f128indicates float128_t, passed by value
-
-The circumstances under which values of floating-point types -extFloat80_t and float128_t may be passed either by -value or indirectly via pointers was discussed earlier in -section 4.5, Conventions for Passing Arguments and Results. -

- -

8.1. Conversions from Integer to Floating-Point

- -

-All conversions from a 32-bit or 64-bit integer, -signed or unsigned, to a floating-point format are supported. -Functions performing these conversions have these names: -

-ui32_to_<float>
-ui64_to_<float>
-i32_to_<float>
-i64_to_<float> -
-Conversions from 32-bit integers to 64-bit -double-precision and larger formats are always exact, and likewise conversions -from 64-bit integers to 80-bit -double-extended-precision and 128-bit quadruple-precision are also -always exact. -

- -

-Each conversion function takes one input of the appropriate type and generates -one output. -The following illustrates the signatures of these functions in cases when the -floating-point result is passed either by value or via pointers: -

-
-float64_t i32_to_f64( int32_t a );
-
-
-void i32_to_f128M( int32_t a, float128_t *destPtr );
-
-
-

- -

8.2. Conversions from Floating-Point to Integer

- -

-Conversions from a floating-point format to a 32-bit or -64-bit integer, signed or unsigned, are supported with these -functions: -

-<float>_to_ui32
-<float>_to_ui64
-<float>_to_i32
-<float>_to_i64 -
-The functions have signatures as follows, depending on whether the -floating-point input is passed by value or via pointers: -
-
-int_fast32_t f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact );
-
-
-int_fast32_t
- f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact );
-
-
-

- -

-The roundingMode argument specifies the rounding mode for -the conversion. -The variable that usually indicates rounding mode, -softfloat_roundingMode, is ignored. -Argument exact determines whether the inexact -exception flag is raised if the conversion is not exact. -If exact is true, the inexact flag may -be raised; -otherwise, it will not be, even if the conversion is inexact. -

- -

-A conversion from floating-point to integer format raises the invalid -exception if the source value cannot be rounded to a representable integer of -the desired size (32 or 64 bits). -In such circumstances, the integer result returned is determined by the -particular port of SoftFloat, although typically this value will be either the -maximum or minimum value of the integer format. -The functions that convert to integer types never raise the floating-point -overflow exception. -

- -

-Because languages such as C require that conversions to integers -be rounded toward zero, the following functions are provided for improved speed -and convenience: -

-<float>_to_ui32_r_minMag
-<float>_to_ui64_r_minMag
-<float>_to_i32_r_minMag
-<float>_to_i64_r_minMag -
-These functions round only toward zero (to minimum magnitude). -The signatures for these functions are the same as above without the redundant -roundingMode argument: -
-
-int_fast32_t f64_to_i32_r_minMag( float64_t a, bool exact );
-
-
-int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact );
-
-
-

- -

8.3. Conversions Among Floating-Point Types

- -

-Conversions between floating-point formats are done by functions with these -names: -

-<float>_to_<float> -
-All combinations of source and result type are supported where the source and -result are different formats. -There are four different styles of signature for these functions, depending on -whether the input and the output floating-point values are passed by value or -via pointers: -
-
-float32_t f64_to_f32( float64_t a );
-
-
-float32_t f128M_to_f32( const float128_t *aPtr );
-
-
-void f32_to_f128M( float32_t a, float128_t *destPtr );
-
-
-void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *destPtr );
-
-
-

- -

-Conversions from a smaller to a larger floating-point format are always exact -and so require no rounding. -

- -

8.4. Basic Arithmetic Functions

- -

-The following basic arithmetic functions are provided: -

-<float>_add
-<float>_sub
-<float>_mul
-<float>_div
-<float>_sqrt -
-Each floating-point operation takes two operands, except for sqrt -(square root) which takes only one. -The operands and result are all of the same floating-point format. -Signatures for these functions take the following forms: -
-
-float64_t f64_add( float64_t a, float64_t b );
-
-
-void
- f128M_add(
-     const float128_t *aPtr, const float128_t *bPtr, float128_t *destPtr );
-
-
-float64_t f64_sqrt( float64_t a );
-
-
-void f128M_sqrt( const float128_t *aPtr, float128_t *destPtr );
-
-
-When floating-point values are passed indirectly through pointers, arguments -aPtr and bPtr point to the input -operands, and the last argument, destPtr, points to the -location where the result is stored. -

- -

-Rounding of the 80-bit double-extended-precision -(extFloat80_t) functions is affected by variable -extF80_roundingPrecision, as explained earlier in -section 6.3, -Rounding Precision for the 80-Bit Extended Format. -

- -

8.5. Fused Multiply-Add Functions

- -

-The 2008 version of the IEEE Floating-Point Standard defines a fused -multiply-add operation that does a combined multiplication and addition -with only a single rounding. -SoftFloat implements fused multiply-add with functions -

-<float>_mulAdd -
-Unlike other operations, fused multiple-add is not supported for the -80-bit double-extended-precision format, -extFloat80_t. -

- -

-Depending on whether floating-point values are passed by value or via pointers, -the fused multiply-add functions have signatures of these forms: -

-
-float64_t f64_mulAdd( float64_t a, float64_t b, float64_t c );
-
-
-void
- f128M_mulAdd(
-     const float128_t *aPtr,
-     const float128_t *bPtr,
-     const float128_t *cPtr,
-     float128_t *destPtr
- );
-
-
-The functions compute -(a × b) - + c -with a single rounding. -When floating-point values are passed indirectly through pointers, arguments -aPtr, bPtr, and -cPtr point to operands a, -b, and c respectively, and -destPtr points to the location where the result is stored. -

- -

-If one of the multiplication operands a and -b is infinite and the other is zero, these functions raise -the invalid exception even if operand c is a quiet NaN. -

- -

8.6. Remainder Functions

- -

-For each format, SoftFloat implements the remainder operation defined by the -IEEE Floating-Point Standard. -The remainder functions have names -

-<float>_rem -
-Each remainder operation takes two floating-point operands of the same format -and returns a result in the same format. -Depending on whether floating-point values are passed by value or via pointers, -the remainder functions have signatures of these forms: -
-
-float64_t f64_rem( float64_t a, float64_t b );
-
-
-void
- f128M_rem(
-     const float128_t *aPtr, const float128_t *bPtr, float128_t *destPtr );
-
-
-When floating-point values are passed indirectly through pointers, arguments -aPtr and bPtr point to operands -a and b respectively, and -destPtr points to the location where the result is stored. -

- -

-The IEEE Standard remainder operation computes the value -a - − n × b, -where n is the integer closest to -a ÷ b. -If a ÷ b is exactly -halfway between two integers, n is the even integer closest to -a ÷ b. -The IEEE Standard’s remainder operation is always exact and so requires -no rounding. -

- -

-Depending on the relative magnitudes of the operands, the remainder -functions can take considerably longer to execute than the other SoftFloat -functions. -This is an inherent characteristic of the remainder operation itself and is not -a flaw in the SoftFloat implementation. -

- -

8.7. Round-to-Integer Functions

- -

-For each format, SoftFloat implements the round-to-integer operation specified -by the IEEE Floating-Point Standard. -These functions are named -

-<float>_roundToInt -
-Each round-to-integer operation takes a single floating-point operand. -This operand is rounded to an integer according to a specified rounding mode, -and the resulting integer value is returned in the same floating-point format. -(Note that the result is not an integer type.) -

- -

-The signatures of the round-to-integer functions are similar to those for -conversions to an integer type: -

-
-float64_t f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact );
-
-
-void
- f128M_roundToInt(
-     const float128_t *aPtr,
-     uint_fast8_t roundingMode,
-     bool exact,
-     float128_t *destPtr
- );
-
-
-When floating-point values are passed indirectly through pointers, -aPtr points to the input operand and -destPtr points to the location where the result is stored. -

- -

-The roundingMode argument specifies the rounding mode to -apply. -The variable that usually indicates rounding mode, -softfloat_roundingMode, is ignored. -Argument exact determines whether the inexact -exception flag is raised if the conversion is not exact. -If exact is true, the inexact flag may -be raised; -otherwise, it will not be, even if the conversion is inexact. -

- -

8.8. Comparison Functions

- -

-For each format, the following floating-point comparison functions are -provided: -

-<float>_eq
-<float>_le
-<float>_lt -
-Each comparison takes two operands of the same type and returns a Boolean. -The abbreviation eq stands for “equal” (=); -le stands for “less than or equal” (≤); -and lt stands for “less than” (<). -Depending on whether the floating-point operands are passed by value or via -pointers, the comparison functions have signatures of these forms: -
-
-bool f64_eq( float64_t a, float64_t b );
-
-
-bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr );
-
-
-

- -

-The usual greater-than (>), greater-than-or-equal (≥), and not-equal -(≠) comparisons are easily obtained from the functions provided. -The not-equal function is just the logical complement of the equal function. -The greater-than-or-equal function is identical to the less-than-or-equal -function with the arguments in reverse order, and likewise the greater-than -function is identical to the less-than function with the arguments reversed. -

- -

-The IEEE Floating-Point Standard specifies that the less-than-or-equal and -less-than comparisons by default raise the invalid exception if either -operand is any kind of NaN. -Equality comparisons, on the other hand, are defined by default to raise the -invalid exception only for signaling NaNs, not quiet NaNs. -For completeness, SoftFloat provides these complementary functions: -

-<float>_eq_signaling
-<float>_le_quiet
-<float>_lt_quiet -
-The signaling equality comparisons are identical to the default -equality comparisons except that the invalid exception is raised for any -NaN input, not just for signaling NaNs. -Similarly, the quiet comparison functions are identical to their -default counterparts except that the invalid exception is not raised for -quiet NaNs. -

- -

8.9. Signaling NaN Test Functions

- -

-Functions for testing whether a floating-point value is a signaling NaN are -provided with these names: -

-<float>_isSignalingNaN -
-The functions take one floating-point operand and return a Boolean indicating -whether the operand is a signaling NaN. -Accordingly, the functions have the forms -
-
-bool f64_isSignalingNaN( float64_t a );
-
-
-bool f128M_isSignalingNaN( const float128_t *aPtr );
-
-
-

- -

8.10. Raise-Exception Function

- -

-SoftFloat provides a single function for raising floating-point exceptions: -

-
-void softfloat_raiseFlags( uint_fast8_t exceptions );
-
-
-The exceptions argument is a mask indicating the set of -exceptions to raise. -(See earlier section 7, Exceptions and Exception Flags.) -In addition to setting the specified exception flags in variable -softfloat_exceptionFlags, the softfloat_raiseFlags -function may cause a trap or abort appropriate for the current system. -

- - -

9. Changes from SoftFloat Release 2

- -

-Apart from a change in the legal use license, Release 3 of -SoftFloat introduced numerous technical differences compared to earlier -releases. -

- -

9.1. Name Changes

- -

-The most obvious and pervasive difference compared to Release 2 -is that the names of most functions and variables have changed, even when the -behavior has not. -First, the floating-point types, the mode variables, the exception flags -variable, the function to raise exceptions, and various associated constants -have been renamed as follows: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
old name, Release 2:new name, Release 3:
float32float32_t
float64float64_t
floatx80extFloat80_t
float128float128_t
float_rounding_modesoftfloat_roundingMode
float_round_nearest_evensoftfloat_round_near_even
float_round_to_zerosoftfloat_round_minMag
float_round_downsoftfloat_round_min
float_round_upsoftfloat_round_max
float_detect_tininesssoftfloat_detectTininess
float_tininess_before_rounding    softfloat_tininess_beforeRounding
float_tininess_after_roundingsoftfloat_tininess_afterRounding
floatx80_rounding_precisionextF80_roundingPrecision
float_exception_flagssoftfloat_exceptionFlags
float_flag_inexactsoftfloat_flag_inexact
float_flag_underflowsoftfloat_flag_underflow
float_flag_overflowsoftfloat_flag_overflow
float_flag_divbyzerosoftfloat_flag_infinite
float_flag_invalidsoftfloat_flag_invalid
float_raisesoftfloat_raiseFlags
-
-

- -

-Furthermore, Release 3 adopted the following new abbreviations for -function names: -

- - - - - - - - - - - -
used in names in Release 2:    used in names in Release 3:
int32 i32
int64 i64
float32 f32
float64 f64
floatx80 extF80
float128 f128
-
-Thus, for example, the function to add two 32-bit floating-point -numbers, previously called float32_add in Release 2, -is now f32_add. -Lastly, there have been a few other changes to function names: -
- - - - - - - - - - - - - - - - - - - - - -
used in names in Release 2:   used in names in Release 3:   relevant functions:
_round_to_zero_r_minMagconversions from floating-point to integer (section 8.2)
round_to_introundToIntround-to-integer functions (section 8.7)
is_signaling_nan    isSignalingNaNsignaling NaN test functions (section 8.9)
-
-

- -

9.2. Changes to Function Arguments

- -

-Besides simple name changes, some operations were given a different interface -in Release 3 than they had in Release 2: -

    - -
  • -

    -Since Release 3, integer arguments and results of functions have -standard types from header <stdint.h>, such as -uint32_t, whereas previously their types could be defined -differently for each port of SoftFloat, usually using traditional C types such -as unsigned int. -Likewise, functions in Release 3 and later pass Booleans as -standard type bool from <stdbool.h>, whereas -previously these were again passed as a port-specific type (usually -int). -

    - -
  • -

    -As explained earlier in section 4.5, Conventions for Passing -Arguments and Results, SoftFloat functions in Release 3 and -later may pass 80-bit and 128-bit floating-point -values through pointers, meaning that functions take pointer arguments and then -read or write floating-point values at the locations indicated by the pointers. -In Release 2, floating-point arguments and results were always -passed by value, regardless of their size. -

    - -
  • -

    -Functions that round to an integer have additional -roundingMode and exact arguments that -they did not have in Release 2. -Refer to sections 8.2 and 8.7 for descriptions of these functions -since Release 3. -For Release 2, the rounding mode, when needed, was taken from the -same global variable that affects the basic arithmetic operations (now called -softfloat_roundingMode but previously known as -float_rounding_mode). -Also, for Release 2, if the original floating-point input was not -an exact integer value, and if the invalid exception was not raised by -the function, the inexact exception was always raised. -Release 2 had no option to suppress raising inexact in this -case. -Applications using SoftFloat Release 3 or later can get the same -effect as Release 2 by passing variable -softfloat_roundingMode for argument -roundingMode and true for argument -exact. -

    - -
-

- -

9.3. Added Capabilities

- -

-With Release 3, some new features have been added that were not -present in Release 2: -

    - -
  • -

    -A port of SoftFloat can now define any of the floating-point types -float32_t, float64_t, extFloat80_t, and -float128_t as aliases for C’s standard floating-point types -float, double, and long -double, using either #define or typedef. -This potential convenience was not supported under Release 2. -

    - -

    -(Note, however, that there may be a performance cost to defining -SoftFloat’s floating-point types this way, depending on the platform and -the applications using SoftFloat. -Ports of SoftFloat may choose to forgo the convenience in favor of better -speed.) -

    - -

    -

  • -As of Release 3b, 16-bit half-precision, -float16_t, is supported. -

    - -

    -

  • -Functions have been added for converting between the floating-point types and -unsigned integers. -Release 2 supported only signed integers, not unsigned. -

    - -

    -

  • -Fused multiply-add functions have been added for all floating-point formats -except 80-bit double-extended-precision, -extFloat80_t. -

    - -

    -

  • -New rounding modes are supported: -softfloat_round_near_maxMag (round to nearest, with ties to -maximum magnitude, away from zero), and, as of Release 3c, -optional softfloat_round_odd (round to odd, also known as -jamming). -

    - -
-

- -

9.4. Better Compatibility with the C Language

- -

-Release 3 of SoftFloat was written to conform better to the ISO C -Standard’s rules for portability. -For example, older releases of SoftFloat employed type conversions in ways -that, while commonly practiced, are not fully defined by the C Standard. -Such problematic type conversions have generally been replaced by the use of -unions, the behavior around which is more strictly regulated these days. -

- -

9.5. New Organization as a Library

- -

-Starting with Release 3, SoftFloat now builds as a library. -Previously, SoftFloat compiled into a single, monolithic object file containing -all the SoftFloat functions, with the consequence that a program linking with -SoftFloat would get every SoftFloat function in its binary file even if only a -few functions were actually used. -With SoftFloat in the form of a library, a program that is linked by a standard -linker will include only those functions of SoftFloat that it needs and no -others. -

- -

9.6. Optimization Gains (and Losses)

- -

-Individual SoftFloat functions have been variously improved in -Release 3 compared to earlier releases. -In particular, better, faster algorithms have been deployed for the operations -of division, square root, and remainder. -For functions operating on the larger 80-bit and -128-bit formats, extFloat80_t and -float128_t, code size has also generally been reduced. -

- -

-However, because Release 2 compiled all of SoftFloat together as a -single object file, compilers could make optimizations across function calls -when one SoftFloat function calls another. -Now that the functions of SoftFloat are compiled separately and only afterward -linked together into a program, there is not usually the same opportunity to -optimize across function calls. -Some loss of speed has been observed due to this change. -

- - -

10. Future Directions

- -

-The following improvements are anticipated for future releases of SoftFloat: -

    -
  • -more functions from the 2008 version of the IEEE Floating-Point Standard; -
  • -consistent, defined behavior for non-canonical representations of extended -format extFloat80_t (discussed in section 4.4, -Non-canonical Representations in extFloat80_t). - -
-

- - -

11. Contact Information

- -

-At the time of this writing, the most up-to-date information about SoftFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - - - diff --git a/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint64_t uiA0; - - aSPtr = (const struct extFloat80M *) aPtr; - if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; - uiA0 = aSPtr->signif; - return - ! (uiA0 & UINT64_C( 0x4000000000000000 )) - && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "primitives.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool f128M_isSignalingNaN( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; - return - ((uiA96 & 0x00007FFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c deleted file mode 100644 index 3405b3ba4..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| `zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - - zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); - zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c deleted file mode 100644 index cb7424f43..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; - uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c deleted file mode 100644 index e7ea80258..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument -| `zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - - softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); - zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c deleted file mode 100644 index 7a9423bea..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); - uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c deleted file mode 100644 index d4e458a94..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c deleted file mode 100644 index ed6c2268f..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c deleted file mode 100644 index 1182be3c9..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) -{ - - return - (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) - | aPtr->v64>>12; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c deleted file mode 100644 index 00baf35f8..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by `zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) -{ - - if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = signExtF80UI64( aSPtr->signExp ); - zPtr->v64 = aSPtr->signif<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c deleted file mode 100644 index ab6311ef2..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA64>>15; - zPtr->v64 = uiA0<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c deleted file mode 100644 index 55ec25b58..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument `aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) -{ - - if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; - softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c deleted file mode 100644 index f838f02aa..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - struct uint128 NaNSig; - - if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); - zPtr->sign = uiA64>>63; - zPtr->v64 = NaNSig.v64; - zPtr->v0 = NaNSig.v0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c deleted file mode 100644 index c1e242d23..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF16UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>15; - zPtr->v64 = (uint_fast64_t) uiA<<54; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c deleted file mode 100644 index b21ba6603..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF32UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>31; - zPtr->v64 = (uint_fast64_t) uiA<<41; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c deleted file mode 100644 index 6529d2ee5..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF64UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>63; - zPtr->v64 = uiA<<12; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c deleted file mode 100644 index ea1d57a78..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by `zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - bool isSigNaNA; - const struct extFloat80M *sPtr; - bool isSigNaNB; - uint_fast16_t uiB64; - uint64_t uiB0; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiMagA64, uiMagB64; - - isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); - sPtr = aSPtr; - if ( ! bSPtr ) { - if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); - goto copy; - } - isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr ); - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - uiB64 = bSPtr->signExp; - if ( isSigNaNB ) goto returnLargerUIMag; - uiB0 = bSPtr->signif; - if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB; - goto copy; - } else { - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy; - goto copyB; - } - } - uiB64 = bSPtr->signExp; - returnLargerUIMag: - uiA64 = aSPtr->signExp; - uiMagA64 = uiA64 & 0x7FFF; - uiMagB64 = uiB64 & 0x7FFF; - if ( uiMagA64 < uiMagB64 ) goto copyB; - if ( uiMagB64 < uiMagA64 ) goto copy; - uiA0 = aSPtr->signif; - uiB0 = bSPtr->signif; - if ( uiA0 < uiB0 ) goto copyB; - if ( uiB0 < uiA0 ) goto copy; - if ( uiA64 < uiB64 ) goto copy; - copyB: - sPtr = bSPtr; - copy: - zSPtr->signExp = sPtr->signExp; - zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c deleted file mode 100644 index cc3f0f42c..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast64_t uiNonsigA0, uiNonsigB0; - uint_fast16_t uiMagA64, uiMagB64; - struct uint128 uiZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); - isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 ); - uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB; - goto returnA; - } else { - if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA; - goto returnB; - } - } - returnLargerMag: - uiMagA64 = uiA64 & 0x7FFF; - uiMagB64 = uiB64 & 0x7FFF; - if ( uiMagA64 < uiMagB64 ) goto returnB; - if ( uiMagB64 < uiMagA64 ) goto returnA; - if ( uiA0 < uiB0 ) goto returnB; - if ( uiB0 < uiA0 ) goto returnA; - if ( uiA64 < uiB64 ) goto returnA; - returnB: - uiZ.v64 = uiB64; - uiZ.v0 = uiNonsigB0; - return uiZ; - returnA: - uiZ.v64 = uiA64; - uiZ.v0 = uiNonsigA0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c deleted file mode 100644 index aa903bf80..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c +++ /dev/null @@ -1,76 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by `zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr', -| and `zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - bool isSigNaNA; - const uint32_t *ptr; - - ptr = aWPtr; - isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); - if ( - isSigNaNA - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto copy; - } - if ( ! softfloat_isNaNF128M( aWPtr ) ) ptr = bWPtr; - copy: - zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; - zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c deleted file mode 100644 index 1c1c2f4a0..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating `uiA64' and -| `uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating `uiB64' and `uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - } - if ( isNaNF128UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v64 |= UINT64_C( 0x0000800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c deleted file mode 100644 index 4e87ff41f..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting `uiA' and `uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either `uiA' or `uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF16UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | 0x0200; - } - return (isNaNF16UI( uiA ) ? uiA : uiB) | 0x0200; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c deleted file mode 100644 index e1a875525..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting `uiA' and `uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either `uiA' or `uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF32UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | 0x00400000; - } - return (isNaNF32UI( uiA ) ? uiA : uiB) | 0x00400000; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c deleted file mode 100644 index 1af349f3e..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting `uiA' and `uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either `uiA' or `uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF64UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) return uiA | UINT64_C( 0x0008000000000000 ); - } - return (isNaNF64UI( uiA ) ? uiA : uiB) | UINT64_C( 0x0008000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c deleted file mode 100644 index 3115306be..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Raises the exceptions specified by `flags'. Floating-point traps can be -| defined here if desired. It is currently not possible for such a trap -| to substitute a result value. If traps are not implemented, this routine -| should be simply `softfloat_exceptionFlags |= flags;'. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t flags ) -{ - - softfloat_exceptionFlags |= flags; - -} - diff --git a/addins/SoftFloat-3e/source/8086-SSE/specialize.h b/addins/SoftFloat-3e/source/8086-SSE/specialize.h deleted file mode 100644 index 5fe119a1e..000000000 --- a/addins/SoftFloat-3e/source/8086-SSE/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef specialize_h -#define specialize_h 1 - -#include -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_afterRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0xFFFFFFFF -#define ui32_fromNaN 0xFFFFFFFF -#define i32_fromPosOverflow (-0x7FFFFFFF - 1) -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN (-0x7FFFFFFF - 1) - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 64-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - -/*---------------------------------------------------------------------------- -| "Common NaN" structure, used to transfer NaN representations from one format -| to another. -*----------------------------------------------------------------------------*/ -struct commonNaN { - bool sign; -#ifdef LITTLEENDIAN - uint64_t v0, v64; -#else - uint64_t v64, v0; -#endif -}; - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 16-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF16UI 0xFE00 - -/*---------------------------------------------------------------------------- -| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a -| 16-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 32-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF32UI 0xFFC00000 - -/*---------------------------------------------------------------------------- -| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a -| 32-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 64-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a -| 64-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF ))) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 80-bit extended floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNExtF80UI64 0xFFFF -#define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 80-bit unsigned integer formed from concatenating -| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended -| floating-point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI64 UINT64_C( 0xFFFF800000000000 ) -#define defaultNaNF128UI0 UINT64_C( 0 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 128-bit unsigned integer formed from concatenating -| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- -| point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF )))) - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ); - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI96 0xFFFF8000 -#define defaultNaNF128UI64 0 -#define defaultNaNF128UI32 0 -#define defaultNaNF128UI0 0 - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument 'aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint64_t uiA0; - - aSPtr = (const struct extFloat80M *) aPtr; - if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; - uiA0 = aSPtr->signif; - return - ! (uiA0 & UINT64_C( 0x4000000000000000 )) - && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); - -} - diff --git a/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "primitives.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool f128M_isSignalingNaN( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; - return - ((uiA96 & 0x00007FFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c deleted file mode 100644 index 3405b3ba4..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| `zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - - zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); - zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c deleted file mode 100644 index cb7424f43..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; - uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c deleted file mode 100644 index e7ea80258..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by `zWPtr'. Argument -| `zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - - softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); - zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c deleted file mode 100644 index 7a9423bea..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); - uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c deleted file mode 100644 index d4e458a94..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c deleted file mode 100644 index ed6c2268f..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c deleted file mode 100644 index 1182be3c9..000000000 --- a/addins/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by `aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) -{ - - return - (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) - | aPtr->v64>>12; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c deleted file mode 100644 index 00baf35f8..000000000 --- a/addins/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by `aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by `zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) -{ - - if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = signExtF80UI64( aSPtr->signExp ); - zPtr->v64 = aSPtr->signif<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c deleted file mode 100644 index ab6311ef2..000000000 --- a/addins/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA64>>15; - zPtr->v64 = uiA0<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c deleted file mode 100644 index 55ec25b58..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by `aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by `zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument `aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) -{ - - if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; - softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c deleted file mode 100644 index f838f02aa..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating `uiA64' and `uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - struct uint128 NaNSig; - - if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); - zPtr->sign = uiA64>>63; - zPtr->v64 = NaNSig.v64; - zPtr->v0 = NaNSig.v0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c deleted file mode 100644 index c1e242d23..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF16UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>15; - zPtr->v64 = (uint_fast64_t) uiA<<54; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c deleted file mode 100644 index b21ba6603..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF32UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>31; - zPtr->v64 = (uint_fast64_t) uiA<<41; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c deleted file mode 100644 index 6529d2ee5..000000000 --- a/addins/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming `uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by `zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF64UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>63; - zPtr->v64 = uiA<<12; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c deleted file mode 100644 index ea1d57a78..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by `aSPtr' and `bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by `zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - bool isSigNaNA; - const struct extFloat80M *sPtr; - bool isSigNaNB; - uint_fast16_t uiB64; - uint64_t uiB0; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiMagA64, uiMagB64; - - isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); - sPtr = aSPtr; - if ( ! bSPtr ) { - if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); - goto copy; - } - isSigNaNB = extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr ); - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - uiB64 = bSPtr->signExp; - if ( isSigNaNB ) goto returnLargerUIMag; - uiB0 = bSPtr->signif; - if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto copyB; - goto copy; - } else { - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto copy; - goto copyB; - } - } - uiB64 = bSPtr->signExp; - returnLargerUIMag: - uiA64 = aSPtr->signExp; - uiMagA64 = uiA64 & 0x7FFF; - uiMagB64 = uiB64 & 0x7FFF; - if ( uiMagA64 < uiMagB64 ) goto copyB; - if ( uiMagB64 < uiMagA64 ) goto copy; - uiA0 = aSPtr->signif; - uiB0 = bSPtr->signif; - if ( uiA0 < uiB0 ) goto copyB; - if ( uiB0 < uiA0 ) goto copy; - if ( uiA64 < uiB64 ) goto copy; - copyB: - sPtr = bSPtr; - copy: - zSPtr->signExp = sPtr->signExp; - zSPtr->signif = sPtr->signif | UINT64_C( 0xC000000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c deleted file mode 100644 index cc3f0f42c..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast64_t uiNonsigA0, uiNonsigB0; - uint_fast16_t uiMagA64, uiMagB64; - struct uint128 uiZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); - isSigNaNB = softfloat_isSigNaNExtF80UI( uiB64, uiB0 ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA0 = uiA0 | UINT64_C( 0xC000000000000000 ); - uiNonsigB0 = uiB0 | UINT64_C( 0xC000000000000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - if ( isNaNExtF80UI( uiB64, uiB0 ) ) goto returnB; - goto returnA; - } else { - if ( isNaNExtF80UI( uiA64, uiA0 ) ) goto returnA; - goto returnB; - } - } - returnLargerMag: - uiMagA64 = uiA64 & 0x7FFF; - uiMagB64 = uiB64 & 0x7FFF; - if ( uiMagA64 < uiMagB64 ) goto returnB; - if ( uiMagB64 < uiMagA64 ) goto returnA; - if ( uiA0 < uiB0 ) goto returnB; - if ( uiB0 < uiA0 ) goto returnA; - if ( uiA64 < uiB64 ) goto returnA; - returnB: - uiZ.v64 = uiB64; - uiZ.v0 = uiNonsigB0; - return uiZ; - returnA: - uiZ.v64 = uiA64; - uiZ.v0 = uiNonsigA0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c deleted file mode 100644 index 06554fbfe..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128M.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| `aWPtr' and `bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by `zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of `aWPtr', `bWPtr', -| and `zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - bool isSigNaNA; - const uint32_t *ptr; - bool isSigNaNB; - uint32_t uiA96, uiB96, wordMagA, wordMagB; - - isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); - ptr = aWPtr; - if ( ! bWPtr ) { - if ( isSigNaNA ) softfloat_raiseFlags( softfloat_flag_invalid ); - goto copy; - } - isSigNaNB = f128M_isSignalingNaN( (const float128_t *) bWPtr ); - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerUIMag; - if ( softfloat_isNaNF128M( bWPtr ) ) goto copyB; - goto copy; - } else { - if ( softfloat_isNaNF128M( aWPtr ) ) goto copy; - goto copyB; - } - } - returnLargerUIMag: - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - wordMagA = uiA96 & 0x7FFFFFFF; - wordMagB = uiB96 & 0x7FFFFFFF; - if ( wordMagA < wordMagB ) goto copyB; - if ( wordMagB < wordMagA ) goto copy; - wordMagA = aWPtr[indexWord( 4, 2 )]; - wordMagB = bWPtr[indexWord( 4, 2 )]; - if ( wordMagA < wordMagB ) goto copyB; - if ( wordMagB < wordMagA ) goto copy; - wordMagA = aWPtr[indexWord( 4, 1 )]; - wordMagB = bWPtr[indexWord( 4, 1 )]; - if ( wordMagA < wordMagB ) goto copyB; - if ( wordMagB < wordMagA ) goto copy; - wordMagA = aWPtr[indexWord( 4, 0 )]; - wordMagB = bWPtr[indexWord( 4, 0 )]; - if ( wordMagA < wordMagB ) goto copyB; - if ( wordMagB < wordMagA ) goto copy; - if ( uiA96 < uiB96 ) goto copy; - copyB: - ptr = bWPtr; - copy: - zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; - zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c deleted file mode 100644 index 46b9f5f2c..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast64_t uiNonsigA64, uiNonsigB64, uiMagA64, uiMagB64; - struct uint128 uiZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); - isSigNaNB = softfloat_isSigNaNF128UI( uiB64, uiB0 ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA64 = uiA64 | UINT64_C( 0x0000800000000000 ); - uiNonsigB64 = uiB64 | UINT64_C( 0x0000800000000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - if ( isNaNF128UI( uiB64, uiB0 ) ) goto returnB; - goto returnA; - } else { - if ( isNaNF128UI( uiA64, uiA0 ) ) goto returnA; - goto returnB; - } - } - returnLargerMag: - uiMagA64 = uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - uiMagB64 = uiB64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiMagA64 < uiMagB64 ) goto returnB; - if ( uiMagB64 < uiMagA64 ) goto returnA; - if ( uiA0 < uiB0 ) goto returnB; - if ( uiB0 < uiA0 ) goto returnA; - if ( uiNonsigA64 < uiNonsigB64 ) goto returnA; - returnB: - uiZ.v64 = uiNonsigB64; - uiZ.v0 = uiB0; - return uiZ; - returnA: - uiZ.v64 = uiNonsigA64; - uiZ.v0 = uiA0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c deleted file mode 100644 index 89cc0fe97..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast16_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNF16UI( uiA ); - isSigNaNB = softfloat_isSigNaNF16UI( uiB ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA = uiA | 0x0200; - uiNonsigB = uiB | 0x0200; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - return isNaNF16UI( uiB ) ? uiNonsigB : uiNonsigA; - } else { - return isNaNF16UI( uiA ) ? uiNonsigA : uiNonsigB; - } - } - returnLargerMag: - uiMagA = uiA & 0x7FFF; - uiMagB = uiB & 0x7FFF; - if ( uiMagA < uiMagB ) return uiNonsigB; - if ( uiMagB < uiMagA ) return uiNonsigA; - return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c deleted file mode 100644 index aeb6024ac..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast32_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNF32UI( uiA ); - isSigNaNB = softfloat_isSigNaNF32UI( uiB ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA = uiA | 0x00400000; - uiNonsigB = uiB | 0x00400000; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - return isNaNF32UI( uiB ) ? uiNonsigB : uiNonsigA; - } else { - return isNaNF32UI( uiA ) ? uiNonsigA : uiNonsigB; - } - } - returnLargerMag: - uiMagA = uiA & 0x7FFFFFFF; - uiMagB = uiB & 0x7FFFFFFF; - if ( uiMagA < uiMagB ) return uiNonsigB; - if ( uiMagB < uiMagA ) return uiNonsigA; - return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; - -} - diff --git a/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c deleted file mode 100644 index dabad4024..000000000 --- a/addins/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) -{ - bool isSigNaNA, isSigNaNB; - uint_fast64_t uiNonsigA, uiNonsigB, uiMagA, uiMagB; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - isSigNaNA = softfloat_isSigNaNF64UI( uiA ); - isSigNaNB = softfloat_isSigNaNF64UI( uiB ); - /*------------------------------------------------------------------------ - | Make NaNs non-signaling. - *------------------------------------------------------------------------*/ - uiNonsigA = uiA | UINT64_C( 0x0008000000000000 ); - uiNonsigB = uiB | UINT64_C( 0x0008000000000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isSigNaNA | isSigNaNB ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) { - if ( isSigNaNB ) goto returnLargerMag; - return isNaNF64UI( uiB ) ? uiNonsigB : uiNonsigA; - } else { - return isNaNF64UI( uiA ) ? uiNonsigA : uiNonsigB; - } - } - returnLargerMag: - uiMagA = uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - uiMagB = uiB & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiMagA < uiMagB ) return uiNonsigB; - if ( uiMagB < uiMagA ) return uiNonsigA; - return (uiNonsigA < uiNonsigB) ? uiNonsigA : uiNonsigB; - -} - diff --git a/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c deleted file mode 100644 index 3115306be..000000000 --- a/addins/SoftFloat-3e/source/8086/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Raises the exceptions specified by `flags'. Floating-point traps can be -| defined here if desired. It is currently not possible for such a trap -| to substitute a result value. If traps are not implemented, this routine -| should be simply `softfloat_exceptionFlags |= flags;'. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t flags ) -{ - - softfloat_exceptionFlags |= flags; - -} - diff --git a/addins/SoftFloat-3e/source/8086/specialize.h b/addins/SoftFloat-3e/source/8086/specialize.h deleted file mode 100644 index 5fe119a1e..000000000 --- a/addins/SoftFloat-3e/source/8086/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef specialize_h -#define specialize_h 1 - -#include -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_afterRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0xFFFFFFFF -#define ui32_fromNaN 0xFFFFFFFF -#define i32_fromPosOverflow (-0x7FFFFFFF - 1) -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN (-0x7FFFFFFF - 1) - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 64-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNegOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define i64_fromPosOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - -/*---------------------------------------------------------------------------- -| "Common NaN" structure, used to transfer NaN representations from one format -| to another. -*----------------------------------------------------------------------------*/ -struct commonNaN { - bool sign; -#ifdef LITTLEENDIAN - uint64_t v0, v64; -#else - uint64_t v64, v0; -#endif -}; - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 16-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF16UI 0xFE00 - -/*---------------------------------------------------------------------------- -| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a -| 16-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 32-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF32UI 0xFFC00000 - -/*---------------------------------------------------------------------------- -| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a -| 32-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 64-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF64UI UINT64_C( 0xFFF8000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a -| 64-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF ))) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 80-bit extended floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNExtF80UI64 0xFFFF -#define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 80-bit unsigned integer formed from concatenating -| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended -| floating-point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI64 UINT64_C( 0xFFFF800000000000 ) -#define defaultNaNF128UI0 UINT64_C( 0 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 128-bit unsigned integer formed from concatenating -| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- -| point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF )))) - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ); - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI96 0xFFFF8000 -#define defaultNaNF128UI64 0 -#define defaultNaNF128UI32 0 -#define defaultNaNF128UI0 0 - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument 'aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint64_t uiA0; - - aSPtr = (const struct extFloat80M *) aPtr; - if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; - uiA0 = aSPtr->signif; - return - ! (uiA0 & UINT64_C( 0x4000000000000000 )) - && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "primitives.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool f128M_isSignalingNaN( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; - return - ((uiA96 & 0x00007FFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c deleted file mode 100644 index 54a50dc35..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "softfloat_types.h" - -#define softfloat_commonNaNToExtF80M softfloat_commonNaNToExtF80M -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c deleted file mode 100644 index 5b698f664..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "primitiveTypes.h" - -#define softfloat_commonNaNToExtF80UI softfloat_commonNaNToExtF80UI -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ.v64 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c deleted file mode 100644 index b22baa816..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#define softfloat_commonNaNToF128M softfloat_commonNaNToF128M -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c deleted file mode 100644 index 70f0cf1c6..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "primitiveTypes.h" - -#define softfloat_commonNaNToF128UI softfloat_commonNaNToF128UI -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c deleted file mode 100644 index 7c7d5c82e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,5 +0,0 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c deleted file mode 100644 index 1c6510c7e..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - uint_fast16_t ui64; - uint_fast64_t ui0; - - ui64 = aSPtr->signExp; - ui0 = aSPtr->signif; - if ( - softfloat_isSigNaNExtF80UI( ui64, ui0 ) - || (bSPtr - && (ui64 = bSPtr->signExp, - ui0 = bSPtr->signif, - softfloat_isSigNaNExtF80UI( ui64, ui0 ))) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c deleted file mode 100644 index e1bb1555a..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ) -{ - struct uint128 uiZ; - - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - uiZ.v64 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c deleted file mode 100644 index 9bddee955..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - - if ( - f128M_isSignalingNaN( (const float128_t *) aWPtr ); - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c deleted file mode 100644 index 57fddd158..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ) -{ - struct uint128 uiZ; - - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c deleted file mode 100644 index 0b08e0039..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - - if ( softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF16UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c deleted file mode 100644 index cab740358..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - - if ( softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF32UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c deleted file mode 100644 index 83b91d3a9..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) -{ - - if ( softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return defaultNaNF64UI; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c deleted file mode 100644 index 61046da3c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Raises the exceptions specified by 'flags'. Floating-point traps can be -| defined here if desired. It is currently not possible for such a trap -| to substitute a result value. If traps are not implemented, this routine -| should be simply 'softfloat_exceptionFlags |= flags;'. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t flags ) -{ - - softfloat_exceptionFlags |= flags; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h b/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h deleted file mode 100644 index 2c481a259..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h +++ /dev/null @@ -1,407 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef specialize_h -#define specialize_h 1 - -#include -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_beforeRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0 -#define ui32_fromNaN 0 -#define i32_fromPosOverflow 0x7FFFFFFF -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN 0 - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 64-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNegOverflow 0 -#define ui64_fromNaN 0 -#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF ) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN 0 - -/*---------------------------------------------------------------------------- -| "Common NaN" structure, used to transfer NaN representations from one format -| to another. -*----------------------------------------------------------------------------*/ -struct commonNaN { char _unused; }; - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 16-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF16UI 0x7E00 - -/*---------------------------------------------------------------------------- -| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a -| 16-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_f16UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x0200) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF16UI( aPtr ) ((uint_fast16_t) defaultNaNF16UI) - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 32-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF32UI 0x7FC00000 - -/*---------------------------------------------------------------------------- -| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a -| 32-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_f32UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & 0x00400000) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF32UI( aPtr ) ((uint_fast32_t) defaultNaNF32UI) - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 64-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF64UI UINT64_C( 0x7FF8000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a -| 64-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF ))) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_f64UIToCommonNaN( uiA, zPtr ) if ( ! ((uiA) & UINT64_C( 0x0008000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -#define softfloat_commonNaNToF64UI( aPtr ) ((uint_fast64_t) defaultNaNF64UI) - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 80-bit extended floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNExtF80UI64 0x7FFF -#define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 80-bit unsigned integer formed from concatenating -| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended -| floating-point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_extF80UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA0) & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToExtF80UI -INLINE -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - uiZ.v64 = defaultNaNExtF80UI64; - uiZ.v0 = defaultNaNExtF80UI0; - return uiZ; -} -#else -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); -#endif - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI64 UINT64_C( 0x7FFF800000000000 ) -#define defaultNaNF128UI0 UINT64_C( 0 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 128-bit unsigned integer formed from concatenating -| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- -| point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF )))) - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_f128UIToCommonNaN( uiA64, uiA0, zPtr ) if ( ! ((uiA64) & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToF128UI -INLINE -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - return uiZ; -} -#else -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); -#endif - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ); - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -#define softfloat_extF80MToCommonNaN( aSPtr, zPtr ) if ( ! ((aSPtr)->signif & UINT64_C( 0x4000000000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToExtF80M -INLINE -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; -} -#else -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); -#endif - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI96 0x7FFF8000 -#define defaultNaNF128UI64 0 -#define defaultNaNF128UI32 0 -#define defaultNaNF128UI0 0 - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument 'aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -#define softfloat_f128MToCommonNaN( aWPtr, zPtr ) if ( ! ((aWPtr)[indexWordHi( 4 )] & UINT64_C( 0x0000800000000000 )) ) softfloat_raiseFlags( softfloat_flag_invalid ) - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -#if defined INLINE && ! defined softfloat_commonNaNToF128M -INLINE -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; -} -#else -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); -#endif - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c deleted file mode 100644 index 85ee211c2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool extF80M_isSignalingNaN( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint64_t uiA0; - - aSPtr = (const struct extFloat80M *) aPtr; - if ( (aSPtr->signExp & 0x7FFF) != 0x7FFF ) return false; - uiA0 = aSPtr->signif; - return - ! (uiA0 & UINT64_C( 0x4000000000000000 )) - && (uiA0 & UINT64_C( 0x3FFFFFFFFFFFFFFF)); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c deleted file mode 100644 index 79a707771..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "primitives.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool f128M_isSignalingNaN( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (uiA96 & 0x7FFF8000) != 0x7FFF0000 ) return false; - return - ((uiA96 & 0x00007FFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c deleted file mode 100644 index 543400bc1..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ) -{ - - zSPtr->signExp = packToExtF80UI64( aPtr->sign, 0x7FFF ); - zSPtr->signif = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c deleted file mode 100644 index 6cf1d1191..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ.v64 = (uint_fast16_t) aPtr->sign<<15 | 0x7FFF; - uiZ.v0 = UINT64_C( 0xC000000000000000 ) | aPtr->v64>>1; - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c deleted file mode 100644 index 4e8ede07f..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ) -{ - - softfloat_shortShiftRight128M( (const uint32_t *) &aPtr->v0, 16, zWPtr ); - zWPtr[indexWordHi( 4 )] |= (uint32_t) aPtr->sign<<31 | 0x7FFF8000; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c deleted file mode 100644 index f938c3f2d..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN *aPtr ) -{ - struct uint128 uiZ; - - uiZ = softfloat_shortShiftRight128( aPtr->v64, aPtr->v0, 16 ); - uiZ.v64 |= (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FFF800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c deleted file mode 100644 index 6cd4fc192..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast16_t) aPtr->sign<<15 | 0x7E00 | aPtr->v64>>54; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c deleted file mode 100644 index 7b38167f0..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ) -{ - - return (uint_fast32_t) aPtr->sign<<31 | 0x7FC00000 | aPtr->v64>>41; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c deleted file mode 100644 index 14847029d..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ) -{ - - return - (uint_fast64_t) aPtr->sign<<63 | UINT64_C( 0x7FF8000000000000 ) - | aPtr->v64>>12; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c deleted file mode 100644 index 82216cf41..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ) -{ - - if ( extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = signExtF80UI64( aSPtr->signExp ); - zPtr->v64 = aSPtr->signif<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c deleted file mode 100644 index 2559fb6d2..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA64>>15; - zPtr->v64 = uiA0<<1; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c deleted file mode 100644 index 322d25ab1..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument 'aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ) -{ - - if ( f128M_isSignalingNaN( (const float128_t *) aWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = aWPtr[indexWordHi( 4 )]>>31; - softfloat_shortShiftLeft128M( aWPtr, 16, (uint32_t *) &zPtr->v0 ); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c deleted file mode 100644 index 843c187a7..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ) -{ - struct uint128 NaNSig; - - if ( softfloat_isSigNaNF128UI( uiA64, uiA0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - NaNSig = softfloat_shortShiftLeft128( uiA64, uiA0, 16 ); - zPtr->sign = uiA64>>63; - zPtr->v64 = NaNSig.v64; - zPtr->v0 = NaNSig.v0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c deleted file mode 100644 index f5fe58770..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF16UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>15; - zPtr->v64 = (uint_fast64_t) uiA<<54; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c deleted file mode 100644 index 58726a357..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF32UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>31; - zPtr->v64 = (uint_fast64_t) uiA<<41; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c deleted file mode 100644 index 03761e433..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ) -{ - - if ( softfloat_isSigNaNF64UI( uiA ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - zPtr->sign = uiA>>63; - zPtr->v64 = uiA<<12; - zPtr->v0 = 0; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c deleted file mode 100644 index f10ed0b62..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c +++ /dev/null @@ -1,86 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - const struct extFloat80M *sPtr; - bool isSigNaNA; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - sPtr = aSPtr; - isSigNaNA = extF80M_isSignalingNaN( (const extFloat80_t *) aSPtr ); - if ( - isSigNaNA - || (bSPtr - && extF80M_isSignalingNaN( (const extFloat80_t *) bSPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto copyNonsig; - goto copyNonsigB; - } - uiZ64 = sPtr->signExp; - uiZ0 = sPtr->signif; - if ( isNaNExtF80UI( uiZ64, uiZ0 ) ) goto returnNonsig; - copyNonsigB: - sPtr = bSPtr; - copyNonsig: - uiZ64 = sPtr->signExp; - uiZ0 = sPtr->signif; - returnNonsig: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0 | UINT64_C( 0xC000000000000000 ); - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c deleted file mode 100644 index bd23c2473..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNExtF80UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - goto returnNonsigB; - } - if ( isNaNExtF80UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - returnNonsigB: - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v0 | UINT64_C( 0xC000000000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c deleted file mode 100644 index 23e766a19..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c +++ /dev/null @@ -1,77 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - const uint32_t *ptr; - bool isSigNaNA; - - ptr = aWPtr; - isSigNaNA = f128M_isSignalingNaN( (const float128_t *) aWPtr ); - if ( - isSigNaNA - || (bWPtr && f128M_isSignalingNaN( (const float128_t *) bWPtr )) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( ! isSigNaNA ) ptr = bWPtr; - goto copyNonsig; - } - if ( ! softfloat_isNaNF128M( aWPtr ) ) ptr = bWPtr; - copyNonsig: - zWPtr[indexWordHi( 4 )] = ptr[indexWordHi( 4 )] | 0x00008000; - zWPtr[indexWord( 4, 2 )] = ptr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = ptr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = ptr[indexWord( 4, 0 )]; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c deleted file mode 100644 index b8882d77c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ) -{ - bool isSigNaNA; - struct uint128 uiZ; - - isSigNaNA = softfloat_isSigNaNF128UI( uiA64, uiA0 ); - if ( isSigNaNA || softfloat_isSigNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - if ( isSigNaNA ) goto returnNonsigA; - goto returnNonsigB; - } - if ( isNaNF128UI( uiA64, uiA0 ) ) { - returnNonsigA: - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - } else { - returnNonsigB: - uiZ.v64 = uiB64; - uiZ.v0 = uiB0; - } - uiZ.v64 |= UINT64_C( 0x0000800000000000 ); - return uiZ; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c deleted file mode 100644 index e33332874..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF16UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | 0x0200; - } - return isNaNF16UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c deleted file mode 100644 index c7508ae7c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF32UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | 0x00400000; - } - return isNaNF32UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c b/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c deleted file mode 100644 index 8c6776381..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ) -{ - bool isSigNaNA; - - isSigNaNA = softfloat_isSigNaNF64UI( uiA ); - if ( isSigNaNA || softfloat_isSigNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return (isSigNaNA ? uiA : uiB) | UINT64_C( 0x0008000000000000 ); - } - return isNaNF64UI( uiA ) ? uiA : uiB; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c b/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c deleted file mode 100644 index 61046da3c..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Raises the exceptions specified by 'flags'. Floating-point traps can be -| defined here if desired. It is currently not possible for such a trap -| to substitute a result value. If traps are not implemented, this routine -| should be simply 'softfloat_exceptionFlags |= flags;'. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t flags ) -{ - - softfloat_exceptionFlags |= flags; - -} - diff --git a/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h b/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h deleted file mode 100644 index 5321f33bc..000000000 --- a/addins/SoftFloat-3e/source/ARM-VFPv2/specialize.h +++ /dev/null @@ -1,376 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef specialize_h -#define specialize_h 1 - -#include -#include -#include "primitiveTypes.h" -#include "softfloat.h" - -/*---------------------------------------------------------------------------- -| Default value for 'softfloat_detectTininess'. -*----------------------------------------------------------------------------*/ -#define init_detectTininess softfloat_tininess_beforeRounding - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 32-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui32_fromPosOverflow 0xFFFFFFFF -#define ui32_fromNegOverflow 0 -#define ui32_fromNaN 0 -#define i32_fromPosOverflow 0x7FFFFFFF -#define i32_fromNegOverflow (-0x7FFFFFFF - 1) -#define i32_fromNaN 0 - -/*---------------------------------------------------------------------------- -| The values to return on conversions to 64-bit integer formats that raise an -| invalid exception. -*----------------------------------------------------------------------------*/ -#define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define ui64_fromNegOverflow 0 -#define ui64_fromNaN 0 -#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF ) -#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN 0 - -/*---------------------------------------------------------------------------- -| "Common NaN" structure, used to transfer NaN representations from one format -| to another. -*----------------------------------------------------------------------------*/ -struct commonNaN { - bool sign; -#ifdef LITTLEENDIAN - uint64_t v0, v64; -#else - uint64_t v64, v0; -#endif -}; - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 16-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF16UI 0x7E00 - -/*---------------------------------------------------------------------------- -| Returns true when 16-bit unsigned integer 'uiA' has the bit pattern of a -| 16-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF16UI( uiA ) ((((uiA) & 0x7E00) == 0x7C00) && ((uiA) & 0x01FF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 16-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f16UIToCommonNaN( uint_fast16_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 16-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast16_t softfloat_commonNaNToF16UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 16-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast16_t - softfloat_propagateNaNF16UI( uint_fast16_t uiA, uint_fast16_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 32-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF32UI 0x7FC00000 - -/*---------------------------------------------------------------------------- -| Returns true when 32-bit unsigned integer 'uiA' has the bit pattern of a -| 32-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF32UI( uiA ) ((((uiA) & 0x7FC00000) == 0x7F800000) && ((uiA) & 0x003FFFFF)) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 32-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f32UIToCommonNaN( uint_fast32_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 32-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_commonNaNToF32UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 32-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast32_t - softfloat_propagateNaNF32UI( uint_fast32_t uiA, uint_fast32_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 64-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF64UI UINT64_C( 0x7FF8000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when 64-bit unsigned integer 'uiA' has the bit pattern of a -| 64-bit floating-point signaling NaN. -| Note: This macro evaluates its argument more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF64UI( uiA ) ((((uiA) & UINT64_C( 0x7FF8000000000000 )) == UINT64_C( 0x7FF0000000000000 )) && ((uiA) & UINT64_C( 0x0007FFFFFFFFFFFF ))) - -/*---------------------------------------------------------------------------- -| Assuming 'uiA' has the bit pattern of a 64-bit floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void softfloat_f64UIToCommonNaN( uint_fast64_t uiA, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 64-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -uint_fast64_t softfloat_commonNaNToF64UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting 'uiA' and 'uiB' as the bit patterns of two 64-bit floating- -| point values, at least one of which is a NaN, returns the bit pattern of -| the combined NaN result. If either 'uiA' or 'uiB' has the pattern of a -| signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -uint_fast64_t - softfloat_propagateNaNF64UI( uint_fast64_t uiA, uint_fast64_t uiB ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 80-bit extended floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNExtF80UI64 0x7FFF -#define defaultNaNExtF80UI0 UINT64_C( 0xC000000000000000 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 80-bit unsigned integer formed from concatenating -| 16-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of an 80-bit extended -| floating-point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) ((((uiA64) & 0x7FFF) == 0x7FFF) && ! ((uiA0) & UINT64_C( 0x4000000000000000 )) && ((uiA0) & UINT64_C( 0x3FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of an 80-bit extended floating-point NaN, converts -| this NaN to the common NaN form, and stores the resulting common NaN at the -| location pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80UIToCommonNaN( - uint_fast16_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and returns the bit pattern of this value as an unsigned -| integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToExtF80UI( const struct commonNaN *aPtr ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as an 80-bit extended floating-point value, and likewise interpreting -| the unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 80-bit extended floating-point value, and assuming at least on of these -| floating-point values is a NaN, returns the bit pattern of the combined NaN -| result. If either original floating-point value is a signaling NaN, the -| invalid exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNExtF80UI( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0 - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI64 UINT64_C( 0x7FFF800000000000 ) -#define defaultNaNF128UI0 UINT64_C( 0 ) - -/*---------------------------------------------------------------------------- -| Returns true when the 128-bit unsigned integer formed from concatenating -| 64-bit 'uiA64' and 64-bit 'uiA0' has the bit pattern of a 128-bit floating- -| point signaling NaN. -| Note: This macro evaluates its arguments more than once. -*----------------------------------------------------------------------------*/ -#define softfloat_isSigNaNF128UI( uiA64, uiA0 ) ((((uiA64) & UINT64_C( 0x7FFF800000000000 )) == UINT64_C( 0x7FFF000000000000 )) && ((uiA0) || ((uiA64) & UINT64_C( 0x00007FFFFFFFFFFF )))) - -/*---------------------------------------------------------------------------- -| Assuming the unsigned integer formed from concatenating 'uiA64' and 'uiA0' -| has the bit pattern of a 128-bit floating-point NaN, converts this NaN to -| the common NaN form, and stores the resulting common NaN at the location -| pointed to by 'zPtr'. If the NaN is a signaling NaN, the invalid exception -| is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_f128UIToCommonNaN( - uint_fast64_t uiA64, uint_fast64_t uiA0, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and returns the bit pattern of this value as an unsigned integer. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_commonNaNToF128UI( const struct commonNaN * ); - -/*---------------------------------------------------------------------------- -| Interpreting the unsigned integer formed from concatenating 'uiA64' and -| 'uiA0' as a 128-bit floating-point value, and likewise interpreting the -| unsigned integer formed from concatenating 'uiB64' and 'uiB0' as another -| 128-bit floating-point value, and assuming at least on of these floating- -| point values is a NaN, returns the bit pattern of the combined NaN result. -| If either original floating-point value is a signaling NaN, the invalid -| exception is raised. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_propagateNaNF128UI( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0 - ); - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -| Assuming the 80-bit extended floating-point value pointed to by 'aSPtr' is -| a NaN, converts this NaN to the common NaN form, and stores the resulting -| common NaN at the location pointed to by 'zPtr'. If the NaN is a signaling -| NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_extF80MToCommonNaN( - const struct extFloat80M *aSPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into an 80-bit extended -| floating-point NaN, and stores this NaN at the location pointed to by -| 'zSPtr'. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToExtF80M( - const struct commonNaN *aPtr, struct extFloat80M *zSPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 80-bit extended floating-point values -| pointed to by 'aSPtr' and 'bSPtr' is a NaN, stores the combined NaN result -| at the location pointed to by 'zSPtr'. If either original floating-point -| value is a signaling NaN, the invalid exception is raised. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ); - -/*---------------------------------------------------------------------------- -| The bit pattern for a default generated 128-bit floating-point NaN. -*----------------------------------------------------------------------------*/ -#define defaultNaNF128UI96 0x7FFF8000 -#define defaultNaNF128UI64 0 -#define defaultNaNF128UI32 0 -#define defaultNaNF128UI0 0 - -/*---------------------------------------------------------------------------- -| Assuming the 128-bit floating-point value pointed to by 'aWPtr' is a NaN, -| converts this NaN to the common NaN form, and stores the resulting common -| NaN at the location pointed to by 'zPtr'. If the NaN is a signaling NaN, -| the invalid exception is raised. Argument 'aWPtr' points to an array of -| four 32-bit elements that concatenate in the platform's normal endian order -| to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_f128MToCommonNaN( const uint32_t *aWPtr, struct commonNaN *zPtr ); - -/*---------------------------------------------------------------------------- -| Converts the common NaN pointed to by 'aPtr' into a 128-bit floating-point -| NaN, and stores this NaN at the location pointed to by 'zWPtr'. Argument -| 'zWPtr' points to an array of four 32-bit elements that concatenate in the -| platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_commonNaNToF128M( const struct commonNaN *aPtr, uint32_t *zWPtr ); - -/*---------------------------------------------------------------------------- -| Assuming at least one of the two 128-bit floating-point values pointed to by -| 'aWPtr' and 'bWPtr' is a NaN, stores the combined NaN result at the location -| pointed to by 'zWPtr'. If either original floating-point value is a -| signaling NaN, the invalid exception is raised. Each of 'aWPtr', 'bWPtr', -| and 'zWPtr' points to an array of four 32-bit elements that concatenate in -| the platform's normal endian order to form a 128-bit floating-point value. -*----------------------------------------------------------------------------*/ -void - softfloat_propagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_add.c b/addins/SoftFloat-3e/source/extF80M_add.c deleted file mode 100644 index 02e415fcc..000000000 --- a/addins/SoftFloat-3e/source/extF80M_add.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - signA = signExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsExtF80 : softfloat_subMagsExtF80; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - softfloat_addExtF80M( - (const struct extFloat80M *) aPtr, - (const struct extFloat80M *) bPtr, - (struct extFloat80M *) zPtr, - false - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_div.c b/addins/SoftFloat-3e/source/extF80M_div.c deleted file mode 100644 index 4d543ce9e..000000000 --- a/addins/SoftFloat-3e/source/extF80M_div.c +++ /dev/null @@ -1,194 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_div( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA; - uint_fast16_t uiB64; - int32_t expB; - bool signZ; - uint64_t sigA, x64; - int32_t expZ; - int shiftDist; - uint32_t y[3], recip32, sigB[3]; - int ix; - uint32_t q, qs[2]; - uint_fast16_t uiZ64; - uint64_t uiZ0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - signZ = signExtF80UI64( uiA64 ) ^ signExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( expA == 0x7FFF ) { - if ( expB == 0x7FFF ) goto invalid; - goto infinity; - } - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigA = aSPtr->signif; - x64 = bSPtr->signif; - if ( ! expB ) expB = 1; - if ( ! (x64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! x64 ) { - if ( ! sigA ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - expB += softfloat_normExtF80SigM( &x64 ); - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - expA += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFF; - shiftDist = 29; - if ( sigA < x64 ) { - --expZ; - shiftDist = 30; - } - softfloat_shortShiftLeft64To96M( sigA, shiftDist, y ); - recip32 = softfloat_approxRecip32_1( x64>>32 ); - sigB[indexWord( 3, 0 )] = (uint32_t) x64<<30; - x64 >>= 2; - sigB[indexWord( 3, 2 )] = x64>>32; - sigB[indexWord( 3, 1 )] = x64; - ix = 2; - for (;;) { - x64 = (uint64_t) y[indexWordHi( 3 )] * recip32; - q = (x64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - softfloat_remStep96MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 3 )] & 0x80000000 ) { - --q; - softfloat_add96M( y, sigB, y ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 0x3FFFFF) < 2 ) { - softfloat_remStep96MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 3 )] & 0x80000000 ) { - --q; - softfloat_add96M( y, sigB, y ); - } else if ( softfloat_compare96M( sigB, y ) <= 0 ) { - ++q; - softfloat_sub96M( y, sigB, y ); - } - if ( - y[indexWordLo( 3 )] || y[indexWord( 3, 1 )] || y[indexWord( 3, 2 )] - ) { - q |= 1; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - x64 = (uint64_t) q<<9; - y[indexWord( 3, 0 )] = x64; - x64 = ((uint64_t) qs[0]<<6) + (x64>>32); - y[indexWord( 3, 1 )] = x64; - y[indexWord( 3, 2 )] = (qs[1]<<3) + (x64>>32); - softfloat_roundPackMToExtF80M( - signZ, expZ, y, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_eq.c b/addins/SoftFloat-3e/source/extF80M_eq.c deleted file mode 100644 index e17aa2435..000000000 --- a/addins/SoftFloat-3e/source/extF80M_eq.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_eq( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( uiA0 == uiB0 ) { - return (uiA64 == uiB64) || ! uiA0; - } else { - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return ! softfloat_compareNonnormExtF80M( aSPtr, bSPtr ); - } - return false; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_eq_signaling.c b/addins/SoftFloat-3e/source/extF80M_eq_signaling.c deleted file mode 100644 index c4a732239..000000000 --- a/addins/SoftFloat-3e/source/extF80M_eq_signaling.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_eq_signaling( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_eq_signaling( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_eq_signaling( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( uiA0 == uiB0 ) { - return (uiA64 == uiB64) || ! uiA0; - } else { - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return ! softfloat_compareNonnormExtF80M( aSPtr, bSPtr ); - } - return false; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_le.c b/addins/SoftFloat-3e/source/extF80M_le.c deleted file mode 100644 index e54eb9eea..000000000 --- a/addins/SoftFloat-3e/source/extF80M_le.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_le( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA || ! (uiA0 | uiB0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) <= 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return true; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_le_quiet.c b/addins/SoftFloat-3e/source/extF80M_le_quiet.c deleted file mode 100644 index 943f26206..000000000 --- a/addins/SoftFloat-3e/source/extF80M_le_quiet.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_le_quiet( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA || ! (uiA0 | uiB0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) <= 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return true; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_lt.c b/addins/SoftFloat-3e/source/extF80M_lt.c deleted file mode 100644 index cbc562f64..000000000 --- a/addins/SoftFloat-3e/source/extF80M_lt.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_lt( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA && ((uiA0 | uiB0) != 0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) < 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return false; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_lt_quiet.c b/addins/SoftFloat-3e/source/extF80M_lt_quiet.c deleted file mode 100644 index 650586d02..000000000 --- a/addins/SoftFloat-3e/source/extF80M_lt_quiet.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return extF80_lt_quiet( *aPtr, *bPtr ); - -} - -#else - -bool extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint64_t uiA0; - uint_fast16_t uiB64; - uint64_t uiB0; - bool signA, ltMags; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signExtF80UI64( uiA64 ); - if ( (uiA64 ^ uiB64) & 0x8000 ) { - /*-------------------------------------------------------------------- - | Signs are different. - *--------------------------------------------------------------------*/ - return signA && ((uiA0 | uiB0) != 0); - } else { - /*-------------------------------------------------------------------- - | Signs are the same. - *--------------------------------------------------------------------*/ - if ( ! ((uiA0 & uiB0) & UINT64_C( 0x8000000000000000 )) ) { - return (softfloat_compareNonnormExtF80M( aSPtr, bSPtr ) < 0); - } - if ( uiA64 == uiB64 ) { - if ( uiA0 == uiB0 ) return false; - ltMags = (uiA0 < uiB0); - } else { - ltMags = (uiA64 < uiB64); - } - return signA ^ ltMags; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_mul.c b/addins/SoftFloat-3e/source/extF80M_mul.c deleted file mode 100644 index 281394f71..000000000 --- a/addins/SoftFloat-3e/source/extF80M_mul.c +++ /dev/null @@ -1,139 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_mul( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA; - uint_fast16_t uiB64; - int32_t expB; - bool signZ; - uint_fast16_t exp, uiZ64; - uint64_t uiZ0, sigA, sigB; - int32_t expZ; - uint32_t sigProd[4], *extSigZPtr; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - signZ = signExtF80UI64( uiA64 ) ^ signExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( - (! aSPtr->signif && (expA != 0x7FFF)) - || (! bSPtr->signif && (expB != 0x7FFF)) - ) { - softfloat_invalidExtF80M( zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - sigA = aSPtr->signif; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - expA += softfloat_normExtF80SigM( &sigA ); - } - if ( ! expB ) expB = 1; - sigB = bSPtr->signif; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto zero; - expB += softfloat_normExtF80SigM( &sigB ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - softfloat_mul64To128M( sigA, sigB, sigProd ); - if ( sigProd[indexWordLo( 4 )] ) sigProd[indexWord( 4, 1 )] |= 1; - extSigZPtr = &sigProd[indexMultiwordHi( 4, 3 )]; - if ( sigProd[indexWordHi( 4 )] < 0x80000000 ) { - --expZ; - softfloat_add96M( extSigZPtr, extSigZPtr, extSigZPtr ); - } - softfloat_roundPackMToExtF80M( - signZ, expZ, extSigZPtr, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_rem.c b/addins/SoftFloat-3e/source/extF80M_rem.c deleted file mode 100644 index 4aff18ae9..000000000 --- a/addins/SoftFloat-3e/source/extF80M_rem.c +++ /dev/null @@ -1,204 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_rem( *aPtr, *bPtr ); - -} - -#else - -void - extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64; - int32_t expA, expB; - uint64_t x64; - bool signRem; - uint64_t sigA; - int32_t expDiff; - uint32_t rem[3], x[3], sig32B, q, recip32, rem2[3], *remPtr, *altRemPtr; - uint32_t *newRemPtr, wordMeanRem; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - expB = expExtF80UI64( bSPtr->signExp ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - if ( expA == 0x7FFF ) goto invalid; - /*-------------------------------------------------------------------- - | If we get here, then argument b is an infinity and `expB' is 0x7FFF; - | Doubling `expB' is an easy way to ensure that `expDiff' later is - | less than -1, which will result in returning a canonicalized version - | of argument a. - *--------------------------------------------------------------------*/ - expB += expB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - x64 = bSPtr->signif; - if ( ! (x64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! x64 ) goto invalid; - expB += softfloat_normExtF80SigM( &x64 ); - } - signRem = signExtF80UI64( uiA64 ); - if ( ! expA ) expA = 1; - sigA = aSPtr->signif; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) { - expA = 0; - goto copyA; - } - expA += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < -1 ) goto copyA; - rem[indexWord( 3, 2 )] = sigA>>34; - rem[indexWord( 3, 1 )] = sigA>>2; - rem[indexWord( 3, 0 )] = (uint32_t) sigA<<30; - x[indexWord( 3, 0 )] = (uint32_t) x64<<30; - sig32B = x64>>32; - x64 >>= 2; - x[indexWord( 3, 2 )] = x64>>32; - x[indexWord( 3, 1 )] = x64; - if ( expDiff < 1 ) { - if ( expDiff ) { - --expB; - softfloat_add96M( x, x, x ); - q = 0; - } else { - q = (softfloat_compare96M( x, rem ) <= 0); - if ( q ) softfloat_sub96M( rem, x, rem ); - } - } else { - recip32 = softfloat_approxRecip32_1( sig32B ); - expDiff -= 30; - for (;;) { - x64 = (uint64_t) rem[indexWordHi( 3 )] * recip32; - if ( expDiff < 0 ) break; - q = (x64 + 0x80000000)>>32; - softfloat_remStep96MBy32( rem, 29, x, q, rem ); - if ( rem[indexWordHi( 3 )] & 0x80000000 ) { - softfloat_add96M( rem, x, rem ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (x64>>32)>>(~expDiff & 31); - softfloat_remStep96MBy32( rem, expDiff + 30, x, q, rem ); - if ( rem[indexWordHi( 3 )] & 0x80000000 ) { - remPtr = rem; - altRemPtr = rem2; - softfloat_add96M( remPtr, x, altRemPtr ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - remPtr = rem; - altRemPtr = rem2; - do { - ++q; - newRemPtr = altRemPtr; - softfloat_sub96M( remPtr, x, newRemPtr ); - altRemPtr = remPtr; - remPtr = newRemPtr; - } while ( ! (remPtr[indexWordHi( 3 )] & 0x80000000) ); - selectRem: - softfloat_add96M( remPtr, altRemPtr, x ); - wordMeanRem = x[indexWordHi( 3 )]; - if ( - (wordMeanRem & 0x80000000) - || (! wordMeanRem && (q & 1) && ! x[indexWord( 3, 0 )] - && ! x[indexWord( 3, 1 )]) - ) { - remPtr = altRemPtr; - } - if ( remPtr[indexWordHi( 3 )] & 0x80000000 ) { - signRem = ! signRem; - softfloat_negX96M( remPtr ); - } - softfloat_normRoundPackMToExtF80M( signRem, expB + 2, remPtr, 80, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - if ( expA < 1 ) { - sigA >>= 1 - expA; - expA = 0; - } - zSPtr->signExp = packToExtF80UI64( signRem, expA ); - zSPtr->signif = sigA; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_roundToInt.c b/addins/SoftFloat-3e/source/extF80M_roundToInt.c deleted file mode 100644 index 2e8572957..000000000 --- a/addins/SoftFloat-3e/source/extF80M_roundToInt.c +++ /dev/null @@ -1,176 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - - *zPtr = extF80_roundToInt( *aPtr, roundingMode, exact ); - -} - -#else - -void - extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - const struct extFloat80M *aSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64, signUI64; - int32_t exp; - uint64_t sigA; - uint_fast16_t uiZ64; - uint64_t sigZ, lastBitMask, roundBitsMask; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - exp = expExtF80UI64( uiA64 ); - sigA = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( !(sigA & UINT64_C( 0x8000000000000000 )) && (exp != 0x7FFF) ) { - if ( !sigA ) { - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sigA ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x3FFE ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( signUI64 ) goto mag1; - break; - case softfloat_round_max: - if ( !signUI64 ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - mag1: - uiZ64 = signUI64 | 0x3FFF; - sigZ = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x403E <= exp ) { - if ( exp == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_propagateNaNExtF80M( aSPtr, 0, zSPtr ); - return; - } - sigZ = UINT64_C( 0x8000000000000000 ); - } else { - sigZ = sigA; - } - uiZ64 = signUI64 | exp; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = signUI64 | exp; - lastBitMask = (uint64_t) 1<<(0x403E - exp); - roundBitsMask = lastBitMask - 1; - sigZ = sigA; - if ( roundingMode == softfloat_round_near_maxMag ) { - sigZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - sigZ += lastBitMask>>1; - if ( !(sigZ & roundBitsMask) ) sigZ &= ~lastBitMask; - } else if ( - roundingMode == (signUI64 ? softfloat_round_min : softfloat_round_max) - ) { - sigZ += roundBitsMask; - } - sigZ &= ~roundBitsMask; - if ( !sigZ ) { - ++uiZ64; - sigZ = UINT64_C( 0x8000000000000000 ); - } - if ( sigZ != sigA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sigZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = sigZ; - return; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_sqrt.c b/addins/SoftFloat-3e/source/extF80M_sqrt.c deleted file mode 100644 index 7ee91e0e5..000000000 --- a/addins/SoftFloat-3e/source/extF80M_sqrt.c +++ /dev/null @@ -1,180 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - - *zPtr = extF80_sqrt( *aPtr ); - -} - -#else - -void extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr; - struct extFloat80M *zSPtr; - uint_fast16_t uiA64, signUI64; - int32_t expA; - uint64_t rem64; - int32_t expZ; - uint32_t rem96[3], sig32A, recipSqrt32, sig32Z, q; - uint64_t sig64Z, x64; - uint32_t rem32, term[4], rem[4], extSigZ[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - expA = expExtF80UI64( uiA64 ); - rem64 = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( rem64 & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_propagateNaNExtF80M( aSPtr, 0, zSPtr ); - return; - } - if ( signUI64 ) goto invalid; - rem64 = UINT64_C( 0x8000000000000000 ); - goto copyA; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (rem64 & UINT64_C( 0x8000000000000000 )) ) { - if ( ! rem64 ) { - uiA64 = signUI64; - goto copyA; - } - expA += softfloat_normExtF80SigM( &rem64 ); - } - if ( signUI64 ) goto invalid; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFF; - expA &= 1; - softfloat_shortShiftLeft64To96M( rem64, 30 - expA, rem96 ); - sig32A = rem64>>32; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint64_t) sig32A * recipSqrt32)>>32; - if ( expA ) sig32Z >>= 1; - rem64 = - ((uint64_t) rem96[indexWord( 3, 2 )]<<32 | rem96[indexWord( 3, 1 )]) - - (uint64_t) sig32Z * sig32Z; - rem96[indexWord( 3, 2 )] = rem64>>32; - rem96[indexWord( 3, 1 )] = rem64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - sig64Z = ((uint64_t) sig32Z<<32) + ((uint64_t) q<<3); - term[indexWord( 3, 2 )] = 0; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = ((uint64_t) sig32Z<<32) + sig64Z; - term[indexWord( 3, 1 )] = x64>>32; - term[indexWord( 3, 0 )] = x64; - softfloat_remStep96MBy32( - rem96, 29, term, q, &rem[indexMultiwordHi( 4, 3 )] ); - rem32 = rem[indexWord( 4, 3 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - sig64Z -= 1<<3; - } - rem64 = (uint64_t) rem32<<32 | rem[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32) + 2; - if ( rem64>>34 ) q += recipSqrt32; - x64 = (uint64_t) q<<7; - extSigZ[indexWord( 3, 0 )] = x64; - x64 = (sig64Z<<1) + (x64>>32); - extSigZ[indexWord( 3, 2 )] = x64>>32; - extSigZ[indexWord( 3, 1 )] = x64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xFFFFFF) <= 2 ) { - q &= ~(uint32_t) 0xFFFF; - extSigZ[indexWordLo( 3 )] = q<<7; - x64 = sig64Z + (q>>27); - term[indexWord( 4, 3 )] = 0; - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - term[indexWord( 4, 0 )] = q<<5; - rem[indexWord( 4, 0 )] = 0; - softfloat_remStep128MBy32( rem, 28, term, q, rem ); - q = rem[indexWordHi( 4 )]; - if ( q & 0x80000000 ) { - softfloat_sub1X96M( extSigZ ); - } else { - if ( q || rem[indexWord( 4, 1 )] || rem[indexWord( 4, 2 )] ) { - extSigZ[indexWordLo( 3 )] |= 1; - } - } - } - softfloat_roundPackMToExtF80M( - 0, expZ, extSigZ, extF80_roundingPrecision, zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidExtF80M( zSPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zSPtr->signExp = uiA64; - zSPtr->signif = rem64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_sub.c b/addins/SoftFloat-3e/source/extF80M_sub.c deleted file mode 100644 index 5d1895c7a..000000000 --- a/addins/SoftFloat-3e/source/extF80M_sub.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - const struct extFloat80M *aSPtr, *bSPtr; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - aSPtr = (const struct extFloat80M *) aPtr; - bSPtr = (const struct extFloat80M *) bPtr; - uiA64 = aSPtr->signExp; - uiA0 = aSPtr->signif; - signA = signExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - uiB0 = bSPtr->signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsExtF80 : softfloat_addMagsExtF80; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - softfloat_addExtF80M( - (const struct extFloat80M *) aPtr, - (const struct extFloat80M *) bPtr, - (struct extFloat80M *) zPtr, - true - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f128M.c b/addins/SoftFloat-3e/source/extF80M_to_f128M.c deleted file mode 100644 index da81e8d6b..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f128M.c +++ /dev/null @@ -1,125 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - - *zPtr = extF80_to_f128( *aPtr ); - -} - -#else - -void extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - const struct extFloat80M *aSPtr; - uint32_t *zWPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint32_t uiZ96; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 0 )] = 0; - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) --exp; - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 1 )] = (uint32_t) sig<<17; - sig >>= 15; - zWPtr[indexWord( 4, 2 )] = sig; - if ( exp < 0 ) { - zWPtr[indexWordHi( 4 )] = sig>>32; - softfloat_shiftRight96M( - &zWPtr[indexMultiwordHi( 4, 3 )], - -exp, - &zWPtr[indexMultiwordHi( 4, 3 )] - ); - exp = 0; - sig = (uint64_t) zWPtr[indexWordHi( 4 )]<<32; - } - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp, sig>>32 ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f16.c b/addins/SoftFloat-3e/source/extF80M_to_f16.c deleted file mode 100644 index 5ae38d0c4..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f16.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float16_t extF80M_to_f16( const extFloat80_t *aPtr ) -{ - - return extF80_to_f16( *aPtr ); - -} - -#else - -float16_t extF80M_to_f16( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint16_t uiZ, sig16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig16 = softfloat_shortShiftRightJam64( sig, 49 ); - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, sig16 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f32.c b/addins/SoftFloat-3e/source/extF80M_to_f32.c deleted file mode 100644 index 47cf224dc..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f32.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float32_t extF80M_to_f32( const extFloat80_t *aPtr ) -{ - - return extF80_to_f32( *aPtr ); - -} - -#else - -float32_t extF80M_to_f32( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint32_t uiZ, sig32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = softfloat_shortShiftRightJam64( sig, 33 ); - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, sig32 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_f64.c b/addins/SoftFloat-3e/source/extF80M_to_f64.c deleted file mode 100644 index 5f8f4aa29..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_f64.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t extF80M_to_f64( const extFloat80_t *aPtr ) -{ - - return extF80_to_f64( *aPtr ); - -} - -#else - -float64_t extF80M_to_f64( const extFloat80_t *aPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - struct commonNaN commonNaN; - uint64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80MToCommonNaN( aSPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (sig & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sig ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - exp += softfloat_normExtF80SigM( &sig ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = softfloat_shortShiftRightJam64( sig, 1 ); - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF64( sign, exp, sig ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i32.c b/addins/SoftFloat-3e/source/extF80M_to_i32.c deleted file mode 100644 index 06394e341..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i32.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t - extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_i32( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast32_t - extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) { - if ( sig>>32 ) goto invalid; - if ( -32 < shiftDist ) { - sig <<= -shiftDist; - } else { - if ( (uint32_t) sig ) goto invalid; - } - } else { - sig = softfloat_shiftRightJam64( sig, shiftDist ); - } - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c deleted file mode 100644 index 5f5cf599d..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_i32_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign, raiseInexact; - int32_t z; - uint64_t shiftedSig; - uint32_t absZ; - union { uint32_t ui; int32_t i; } u; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - raiseInexact = exact; - z = 0; - } else { - sign = signExtF80UI64( uiA64 ); - raiseInexact = false; - if ( shiftDist < 0 ) { - if ( sig>>32 || (shiftDist <= -31) ) goto invalid; - shiftedSig = (uint64_t) (uint32_t) sig<<-shiftDist; - if ( shiftedSig>>32 ) goto invalid; - absZ = shiftedSig; - } else { - shiftedSig = sig; - if ( shiftDist ) shiftedSig >>= shiftDist; - if ( shiftedSig>>32 ) goto invalid; - absZ = shiftedSig; - if ( exact && shiftDist ) { - raiseInexact = ((uint64_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t - extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_i64( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast64_t - extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - uint32_t extSig[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c deleted file mode 100644 index ec9b92844..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c +++ /dev/null @@ -1,115 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_i64_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign, raiseInexact; - int64_t z; - uint64_t absZ; - union { uint64_t ui; int64_t i; } u; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - raiseInexact = exact; - z = 0; - } else { - sign = signExtF80UI64( uiA64 ); - raiseInexact = false; - if ( shiftDist < 0 ) { - if ( shiftDist <= -63 ) goto invalid; - shiftDist = -shiftDist; - absZ = sig<>shiftDist != sig ) goto invalid; - } else { - absZ = sig; - if ( shiftDist ) absZ >>= shiftDist; - if ( exact && shiftDist ) raiseInexact = (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t - extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_ui32( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast32_t - extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) { - if ( sig>>32 ) goto invalid; - if ( -32 < shiftDist ) { - sig <<= -shiftDist; - } else { - if ( (uint32_t) sig ) goto invalid; - } - } else { - sig = softfloat_shiftRightJam64( sig, shiftDist ); - } - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c deleted file mode 100644 index e28b08d70..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_ui32_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign; - uint64_t shiftedSig; - uint32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 0 ) { - if ( sign || sig>>32 || (shiftDist <= -31) ) goto invalid; - shiftedSig = (uint64_t) (uint32_t) sig<<-shiftDist; - if ( shiftedSig>>32 ) goto invalid; - z = shiftedSig; - } else { - shiftedSig = sig; - if ( shiftDist ) shiftedSig >>= shiftDist; - if ( shiftedSig>>32 ) goto invalid; - z = shiftedSig; - if ( sign && z ) goto invalid; - if ( exact && shiftDist && ((uint64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t - extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return extF80_to_ui64( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast64_t - extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - bool sign; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - uint32_t extSig[3]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c deleted file mode 100644 index 87d80897b..000000000 --- a/addins/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - - return extF80_to_ui64_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int32_t exp; - uint64_t sig; - int32_t shiftDist; - bool sign; - uint64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aSPtr = (const struct extFloat80M *) aPtr; - uiA64 = aSPtr->signExp; - exp = expExtF80UI64( uiA64 ); - sig = aSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! sig && (exp != 0x7FFF) ) return 0; - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 0 ) { - if ( sign || (shiftDist <= -63) ) goto invalid; - shiftDist = -shiftDist; - z = sig<>shiftDist != sig ) goto invalid; - } else { - z = sig; - if ( shiftDist ) z >>= shiftDist; - if ( sign && z ) goto invalid; - if ( exact && shiftDist && (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t extF80_add( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsExtF80 : softfloat_subMagsExtF80; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/extF80_div.c b/addins/SoftFloat-3e/source/extF80_div.c deleted file mode 100644 index 28dfb13de..000000000 --- a/addins/SoftFloat-3e/source/extF80_div.c +++ /dev/null @@ -1,203 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_div( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; - int_fast32_t expB; - uint_fast64_t sigB; - bool signZ; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint128 rem; - uint_fast32_t recip32; - uint_fast64_t sigZ; - int ix; - uint_fast64_t q64; - uint_fast32_t q; - struct uint128 term; - uint_fast64_t sigZExtra; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) { - if ( ! sigA ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFF; - if ( sigA < sigB ) { - --expZ; - rem = softfloat_shortShiftLeft128( 0, sigA, 32 ); - } else { - rem = softfloat_shortShiftLeft128( 0, sigA, 31 ); - } - recip32 = softfloat_approxRecip32_1( sigB>>32 ); - sigZ = 0; - ix = 2; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>2) * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB>>32, sigB<<32 ); - } - sigZ = (sigZ<<29) + q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 0x3FFFFF) < 2 ) { - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - term = softfloat_shortShiftLeft128( 0, sigB, 32 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, term.v64, term.v0 ); - } else if ( softfloat_le128( term.v64, term.v0, rem.v64, rem.v0 ) ) { - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - } - if ( rem.v64 | rem.v0 ) q |= 1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ = (sigZ<<6) + (q>>23); - sigZExtra = (uint64_t) ((uint_fast64_t) q<<41); - return - softfloat_roundPackToExtF80( - signZ, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_eq.c b/addins/SoftFloat-3e/source/extF80_eq.c deleted file mode 100644 index efcbc3714..000000000 --- a/addins/SoftFloat-3e/source/extF80_eq.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_eq( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return - (uiA0 == uiB0) - && ((uiA64 == uiB64) || (! uiA0 && ! ((uiA64 | uiB64) & 0x7FFF))); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_eq_signaling.c b/addins/SoftFloat-3e/source/extF80_eq_signaling.c deleted file mode 100644 index 193b191e6..000000000 --- a/addins/SoftFloat-3e/source/extF80_eq_signaling.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool extF80_eq_signaling( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return - (uiA0 == uiB0) - && ((uiA64 == uiB64) || (! uiA0 && ! ((uiA64 | uiB64) & 0x7FFF))); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c b/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c deleted file mode 100644 index 33d2abd7e..000000000 --- a/addins/SoftFloat-3e/source/extF80_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_isSignalingNaN( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - - uA.f = a; - return softfloat_isSigNaNExtF80UI( uA.s.signExp, uA.s.signif ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_le.c b/addins/SoftFloat-3e/source/extF80_le.c deleted file mode 100644 index 4e23c5142..000000000 --- a/addins/SoftFloat-3e/source/extF80_le.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_le( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA || ! (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_le_quiet.c b/addins/SoftFloat-3e/source/extF80_le_quiet.c deleted file mode 100644 index 9839e47f9..000000000 --- a/addins/SoftFloat-3e/source/extF80_le_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_le_quiet( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA || ! (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_lt.c b/addins/SoftFloat-3e/source/extF80_lt.c deleted file mode 100644 index a4ac69fa6..000000000 --- a/addins/SoftFloat-3e/source/extF80_lt.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_lt( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA && (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_lt_quiet.c b/addins/SoftFloat-3e/source/extF80_lt_quiet.c deleted file mode 100644 index 00f4d4768..000000000 --- a/addins/SoftFloat-3e/source/extF80_lt_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool extF80_lt_quiet( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - if ( isNaNExtF80UI( uiA64, uiA0 ) || isNaNExtF80UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNExtF80UI( uiA64, uiA0 ) - || softfloat_isSigNaNExtF80UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ); - return - (signA != signB) - ? signA && (((uiA64 | uiB64) & 0x7FFF) | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_mul.c b/addins/SoftFloat-3e/source/extF80_mul.c deleted file mode 100644 index 39ce4012c..000000000 --- a/addins/SoftFloat-3e/source/extF80_mul.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_mul( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; - int_fast32_t expB; - uint_fast64_t sigB; - bool signZ; - uint_fast64_t magBits; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint128 sig128Z, uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - || ((expB == 0x7FFF) && (sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ) { - goto propagateNaN; - } - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - sig128Z = softfloat_mul64To128( sigA, sigB ); - if ( sig128Z.v64 < UINT64_C( 0x8000000000000000 ) ) { - --expZ; - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128Z.v64, sig128Z.v0 ); - } - return - softfloat_roundPackToExtF80( - signZ, expZ, sig128Z.v64, sig128Z.v0, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - } else { - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signZ, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_rem.c b/addins/SoftFloat-3e/source/extF80_rem.c deleted file mode 100644 index 5ad977526..000000000 --- a/addins/SoftFloat-3e/source/extF80_rem.c +++ /dev/null @@ -1,225 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_rem( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - int_fast32_t expB; - uint_fast64_t sigB; - struct exp32_sig64 normExpSig; - int_fast32_t expDiff; - struct uint128 rem, shiftedSigB; - uint_fast32_t q, recip32; - uint_fast64_t q64; - struct uint128 term, altRem, meanRem; - bool signRem; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - || ((expB == 0x7FFF) && (sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ) { - goto propagateNaN; - } - goto invalid; - } - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - /*-------------------------------------------------------------------- - | Argument b is an infinity. Doubling `expB' is an easy way to ensure - | that `expDiff' later is less than -1, which will result in returning - | a canonicalized version of argument a. - *--------------------------------------------------------------------*/ - expB += expB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalExtF80Sig( sigB ); - expB += normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) { - expA = 0; - goto copyA; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < -1 ) goto copyA; - rem = softfloat_shortShiftLeft128( 0, sigA, 32 ); - shiftedSigB = softfloat_shortShiftLeft128( 0, sigB, 32 ); - if ( expDiff < 1 ) { - if ( expDiff ) { - --expB; - shiftedSigB = softfloat_shortShiftLeft128( 0, sigB, 33 ); - q = 0; - } else { - q = (sigB <= sigA); - if ( q ) { - rem = - softfloat_sub128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } - } - } else { - recip32 = softfloat_approxRecip32_1( sigB>>32 ); - expDiff -= 30; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>2) * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - rem = - softfloat_add128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, expDiff + 30 ); - term = softfloat_mul64ByShifted32To128( sigB, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - altRem = - softfloat_add128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem = - softfloat_sub128( - rem.v64, rem.v0, shiftedSigB.v64, shiftedSigB.v0 ); - } while ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = softfloat_add128( rem.v64, rem.v0, altRem.v64, altRem.v0 ); - if ( - (meanRem.v64 & UINT64_C( 0x8000000000000000 )) - || (! (meanRem.v64 | meanRem.v0) && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = softfloat_sub128( 0, 0, rem.v64, rem.v0 ); - } - return - softfloat_normRoundPackToExtF80( - signRem, rem.v64 | rem.v0 ? expB + 32 : 0, rem.v64, rem.v0, 80 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - if ( expA < 1 ) { - sigA >>= 1 - expA; - expA = 0; - } - uiZ64 = packToExtF80UI64( signA, expA ); - uiZ0 = sigA; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_roundToInt.c b/addins/SoftFloat-3e/source/extF80_roundToInt.c deleted file mode 100644 index 6c12d84c9..000000000 --- a/addins/SoftFloat-3e/source/extF80_roundToInt.c +++ /dev/null @@ -1,154 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - extF80_roundToInt( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64, signUI64; - int_fast32_t exp; - uint_fast64_t sigA; - uint_fast16_t uiZ64; - uint_fast64_t sigZ; - struct exp32_sig64 normExpSig; - struct uint128 uiZ; - uint_fast64_t lastBitMask, roundBitsMask; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - signUI64 = uiA64 & packToExtF80UI64( 1, 0 ); - exp = expExtF80UI64( uiA64 ); - sigA = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( !(sigA & UINT64_C( 0x8000000000000000 )) && (exp != 0x7FFF) ) { - if ( !sigA ) { - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - exp += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x403E <= exp ) { - if ( exp == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - uiZ = softfloat_propagateNaNExtF80UI( uiA64, sigA, 0, 0 ); - uiZ64 = uiZ.v64; - sigZ = uiZ.v0; - goto uiZ; - } - sigZ = UINT64_C( 0x8000000000000000 ); - } else { - sigZ = sigA; - } - uiZ64 = signUI64 | exp; - goto uiZ; - } - if ( exp <= 0x3FFE ) { - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( signUI64 ) goto mag1; - break; - case softfloat_round_max: - if ( !signUI64 ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - uiZ64 = signUI64; - sigZ = 0; - goto uiZ; - mag1: - uiZ64 = signUI64 | 0x3FFF; - sigZ = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = signUI64 | exp; - lastBitMask = (uint_fast64_t) 1<<(0x403E - exp); - roundBitsMask = lastBitMask - 1; - sigZ = sigA; - if ( roundingMode == softfloat_round_near_maxMag ) { - sigZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - sigZ += lastBitMask>>1; - if ( !(sigZ & roundBitsMask) ) sigZ &= ~lastBitMask; - } else if ( - roundingMode == (signUI64 ? softfloat_round_min : softfloat_round_max) - ) { - sigZ += roundBitsMask; - } - sigZ &= ~roundBitsMask; - if ( !sigZ ) { - ++uiZ64; - sigZ = UINT64_C( 0x8000000000000000 ); - } - if ( sigZ != sigA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sigZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = sigZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_sqrt.c b/addins/SoftFloat-3e/source/extF80_sqrt.c deleted file mode 100644 index af8c496e1..000000000 --- a/addins/SoftFloat-3e/source/extF80_sqrt.c +++ /dev/null @@ -1,176 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t extF80_sqrt( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - int_fast32_t expA; - uint_fast64_t sigA; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - uint_fast32_t sig32A, recipSqrt32, sig32Z; - struct uint128 rem; - uint_fast64_t q, x64, sigZ; - struct uint128 y, term; - uint_fast64_t sigZExtra; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, 0, 0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! sigA ) goto zero; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalExtF80Sig( sigA ); - expA += normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFF; - expA &= 1; - sig32A = sigA>>32; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sig32Z >>= 1; - rem = softfloat_shortShiftLeft128( 0, sigA, 61 ); - } else { - rem = softfloat_shortShiftLeft128( 0, sigA, 62 ); - } - rem.v64 -= (uint_fast64_t) sig32Z * sig32Z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem.v64>>2) * (uint_fast64_t) recipSqrt32)>>32; - x64 = (uint_fast64_t) sig32Z<<32; - sigZ = x64 + (q<<3); - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_mul64ByShifted32To128( x64 + sigZ, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - sigZ -= 1<<3; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((rem.v64>>2) * recipSqrt32)>>32) + 2; - x64 = sigZ; - sigZ = (sigZ<<1) + (q>>25); - sigZExtra = (uint64_t) (q<<39); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xFFFFFF) <= 2 ) { - q &= ~(uint_fast64_t) 0xFFFF; - sigZExtra = (uint64_t) (q<<39); - term = softfloat_mul64ByShifted32To128( x64 + (q>>27), q ); - x64 = (uint32_t) (q<<5) * (uint_fast64_t) (uint32_t) q; - term = softfloat_add128( term.v64, term.v0, 0, x64 ); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 28 ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - if ( ! sigZExtra ) --sigZ; - --sigZExtra; - } else { - if ( rem.v64 | rem.v0 ) sigZExtra |= 1; - } - } - return - softfloat_roundPackToExtF80( - 0, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ64 = packToExtF80UI64( signA, 0 ); - uiZ0 = 0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_sub.c b/addins/SoftFloat-3e/source/extF80_sub.c deleted file mode 100644 index 770c7563a..000000000 --- a/addins/SoftFloat-3e/source/extF80_sub.c +++ /dev/null @@ -1,80 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t extF80_sub( extFloat80_t a, extFloat80_t b ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool signA; - union { struct extFloat80M s; extFloat80_t f; } uB; - uint_fast16_t uiB64; - uint_fast64_t uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - extFloat80_t - (*magsFuncPtr)( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - signA = signExtF80UI64( uiA64 ); - uB.f = b; - uiB64 = uB.s.signExp; - uiB0 = uB.s.signif; - signB = signExtF80UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_addMagsExtF80( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsExtF80 : softfloat_addMagsExtF80; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f128.c b/addins/SoftFloat-3e/source/extF80_to_f128.c deleted file mode 100644 index 4de90ae31..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f128.c +++ /dev/null @@ -1,75 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t extF80_to_f128( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - uint_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - bool sign; - struct uint128 frac128; - union ui128_f128 uZ; - - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - exp = expExtF80UI64( uiA64 ); - frac = uiA0 & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( (exp == 0x7FFF) && frac ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - sign = signExtF80UI64( uiA64 ); - frac128 = softfloat_shortShiftLeft128( 0, frac, 49 ); - uiZ.v64 = packToF128UI64( sign, exp, frac128.v64 ); - uiZ.v0 = frac128.v0; - } - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f16.c b/addins/SoftFloat-3e/source/extF80_to_f16.c deleted file mode 100644 index 5919403fb..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f16.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t extF80_to_f16( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast16_t uiZ, sig16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig16 = softfloat_shortShiftRightJam64( sig, 49 ); - if ( ! (exp | sig16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, sig16 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f32.c b/addins/SoftFloat-3e/source/extF80_to_f32.c deleted file mode 100644 index 77fcfdc11..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f32.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t extF80_to_f32( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast32_t uiZ, sig32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = softfloat_shortShiftRightJam64( sig, 33 ); - if ( ! (exp | sig32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, sig32 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_f64.c b/addins/SoftFloat-3e/source/extF80_to_f64.c deleted file mode 100644 index 410d6622c..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_f64.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t extF80_to_f64( extFloat80_t a ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - uint_fast64_t uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - uiA0 = uA.s.signif; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! (exp | sig) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( sig & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - softfloat_extF80UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = softfloat_shortShiftRightJam64( sig, 1 ); - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF64( sign, exp, sig ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i32.c b/addins/SoftFloat-3e/source/extF80_to_i32.c deleted file mode 100644 index 9acdc3c9b..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i32.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t - extF80_to_i32( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) shiftDist = 1; - sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c deleted file mode 100644 index 03224678a..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i32_r_minMag.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t extF80_to_i32_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist < 33 ) { - if ( - (uiA64 == packToExtF80UI64( 1, 0x401E )) - && (sig < UINT64_C( 0x8000000100000000 )) - ) { - if ( exact && (sig & UINT64_C( 0x00000000FFFFFFFF )) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - absZ = sig>>shiftDist; - if ( exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - extF80_to_i64( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - uint_fast64_t sigExtra; - struct uint64_extra sig64Extra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigExtra = 0; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64Extra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - } - return softfloat_roundToI64( sign, sig, sigExtra, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c deleted file mode 100644 index 8871d01d1..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_i64_r_minMag.c +++ /dev/null @@ -1,94 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t extF80_to_i64_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( shiftDist <= 0 ) { - if ( - (uiA64 == packToExtF80UI64( 1, 0x403E )) - && (sig == UINT64_C( 0x8000000000000000 )) - ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - absZ = sig>>shiftDist; - if ( exact && (uint64_t) (sig<<(-shiftDist & 63)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sign ? -absZ : absZ; - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui32.c b/addins/SoftFloat-3e/source/extF80_to_ui32.c deleted file mode 100644 index 581297731..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui32.c +++ /dev/null @@ -1,83 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - extF80_to_ui32( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x4032 - exp; - if ( shiftDist <= 0 ) shiftDist = 1; - sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c deleted file mode 100644 index be2c53b1d..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t extF80_to_ui32_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( sign || (shiftDist < 32) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - z = sig>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - extF80_to_ui64( extFloat80_t a, uint_fast8_t roundingMode, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - bool sign; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - uint_fast64_t sigExtra; - struct uint64_extra sig64Extra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - sign = signExtF80UI64( uiA64 ); - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigExtra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - } - return softfloat_roundToUI64( sign, sig, sigExtra, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c deleted file mode 100644 index eca688c65..000000000 --- a/addins/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t extF80_to_ui64_r_minMag( extFloat80_t a, bool exact ) -{ - union { struct extFloat80M s; extFloat80_t f; } uA; - uint_fast16_t uiA64; - int_fast32_t exp; - uint_fast64_t sig; - int_fast32_t shiftDist; - bool sign; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.s.signExp; - exp = expExtF80UI64( uiA64 ); - sig = uA.s.signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signExtF80UI64( uiA64 ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - z = sig>>shiftDist; - if ( exact && (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_add( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint64_t *aWPtr, *bWPtr; - uint_fast64_t uiA64, uiA0; - bool signA; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - signA = signF128UI64( uiA64 ); - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF128 : softfloat_subMagsF128; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - f128M_add( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - softfloat_addF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (uint32_t *) zPtr, - false - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_div.c b/addins/SoftFloat-3e/source/f128M_div.c deleted file mode 100644 index b443548f5..000000000 --- a/addins/SoftFloat-3e/source/f128M_div.c +++ /dev/null @@ -1,187 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_div( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_div( *aPtr, *bPtr ); - -} - -#else - -void - f128M_div( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr, uiA96; - bool signA; - int32_t expA; - uint32_t uiB96; - bool signB; - int32_t expB; - bool signZ; - uint32_t y[5], sigB[4]; - int32_t expZ; - uint32_t recip32; - int ix; - uint64_t q64; - uint32_t q, qs[3], uiZ96; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - signB = signF128UI96( uiB96 ); - expB = expF128UI96( uiB96 ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - if ( expA == 0x7FFF ) { - if ( expB == 0x7FFF ) goto invalid; - goto infinity; - } - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = softfloat_shiftNormSigF128M( aWPtr, 13, y ); - expB = softfloat_shiftNormSigF128M( bWPtr, 13, sigB ); - if ( expA == -128 ) { - if ( expB == -128 ) goto invalid; - goto zero; - } - if ( expB == -128 ) { - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFE; - if ( softfloat_compare128M( y, sigB ) < 0 ) { - --expZ; - softfloat_add128M( y, y, y ); - } - recip32 = - softfloat_approxRecip32_1( - ((uint64_t) sigB[indexWord( 4, 3 )]<<32 | sigB[indexWord( 4, 2 )]) - >>30 - ); - ix = 3; - for (;;) { - q64 = (uint64_t) y[indexWordHi( 4 )] * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - softfloat_remStep128MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 4 )] & 0x80000000 ) { - --q; - softfloat_add128M( y, sigB, y ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 7) < 2 ) { - softfloat_remStep128MBy32( y, 29, sigB, q, y ); - if ( y[indexWordHi( 4 )] & 0x80000000 ) { - --q; - softfloat_add128M( y, sigB, y ); - } else if ( softfloat_compare128M( sigB, y ) <= 0 ) { - ++q; - softfloat_sub128M( y, sigB, y ); - } - if ( - y[indexWordLo( 4 )] || y[indexWord( 4, 1 )] - || (y[indexWord( 4, 2 )] | y[indexWord( 4, 3 )]) - ) { - q |= 1; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q64 = (uint64_t) q<<28; - y[indexWord( 5, 0 )] = q64; - q64 = ((uint64_t) qs[0]<<25) + (q64>>32); - y[indexWord( 5, 1 )] = q64; - q64 = ((uint64_t) qs[1]<<22) + (q64>>32); - y[indexWord( 5, 2 )] = q64; - q64 = ((uint64_t) qs[2]<<19) + (q64>>32); - y[indexWord( 5, 3 )] = q64; - y[indexWord( 5, 4 )] = q64>>32; - softfloat_roundPackMToF128M( signZ, expZ, y, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ96 = packToF128UI96( signZ, 0x7FFF, 0 ); - goto uiZ96; - zero: - uiZ96 = packToF128UI96( signZ, 0, 0 ); - uiZ96: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_eq.c b/addins/SoftFloat-3e/source/f128M_eq.c deleted file mode 100644 index 497fdbf6f..000000000 --- a/addins/SoftFloat-3e/source/f128M_eq.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_eq( *aPtr, *bPtr ); - -} - -#else - -bool f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t wordA, wordB, uiA96, uiB96; - bool possibleOppositeZeros; - uint32_t mashWord; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - possibleOppositeZeros = false; - if ( uiA96 != uiB96 ) { - possibleOppositeZeros = (((uiA96 | uiB96) & 0x7FFFFFFF) == 0); - if ( ! possibleOppositeZeros ) goto false_checkSigNaNs; - } - mashWord = wordA | wordB; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - mashWord |= wordA | wordB; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - if ( wordA != wordB ) goto false_checkSigNaNs; - if ( possibleOppositeZeros && ((mashWord | wordA | wordB) != 0) ) { - goto false_checkSigNaNs; - } - if ( ! softfloat_isNaNF128M( aWPtr ) && ! softfloat_isNaNF128M( bWPtr ) ) { - return true; - } - false_checkSigNaNs: - if ( - f128M_isSignalingNaN( (const float128_t *) aWPtr ) - || f128M_isSignalingNaN( (const float128_t *) bWPtr ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_eq_signaling.c b/addins/SoftFloat-3e/source/f128M_eq_signaling.c deleted file mode 100644 index a9fa4d510..000000000 --- a/addins/SoftFloat-3e/source/f128M_eq_signaling.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_eq_signaling( *aPtr, *bPtr ); - -} - -#else - -bool f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t wordA, wordB, uiA96, uiB96; - bool possibleOppositeZeros; - uint32_t mashWord; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA != wordB ) return false; - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - possibleOppositeZeros = false; - if ( uiA96 != uiB96 ) { - possibleOppositeZeros = (((uiA96 | uiB96) & 0x7FFFFFFF) == 0); - if ( ! possibleOppositeZeros ) return false; - } - mashWord = wordA | wordB; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA != wordB ) return false; - mashWord |= wordA | wordB; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return - (wordA == wordB) - && (! possibleOppositeZeros || ((mashWord | wordA | wordB) == 0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_le.c b/addins/SoftFloat-3e/source/f128M_le.c deleted file mode 100644 index 7306e45c3..000000000 --- a/addins/SoftFloat-3e/source/f128M_le.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_le( *aPtr, *bPtr ); - -} - -#else - -bool f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signA ) return true; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return false; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) == 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) <= 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_le_quiet.c b/addins/SoftFloat-3e/source/f128M_le_quiet.c deleted file mode 100644 index d9e442942..000000000 --- a/addins/SoftFloat-3e/source/f128M_le_quiet.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_le_quiet( *aPtr, *bPtr ); - -} - -#else - -bool f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - if ( f128M_isSignalingNaN( aPtr ) || f128M_isSignalingNaN( bPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signA ) return true; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return false; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return false; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) == 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) <= 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_lt.c b/addins/SoftFloat-3e/source/f128M_lt.c deleted file mode 100644 index d2f797fea..000000000 --- a/addins/SoftFloat-3e/source/f128M_lt.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_lt( *aPtr, *bPtr ); - -} - -#else - -bool f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signB ) return false; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return true; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) != 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) < 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_lt_quiet.c b/addins/SoftFloat-3e/source/f128M_lt_quiet.c deleted file mode 100644 index adbddea71..000000000 --- a/addins/SoftFloat-3e/source/f128M_lt_quiet.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -bool f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return f128_lt_quiet( *aPtr, *bPtr ); - -} - -#else - -bool f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t uiA96, uiB96; - bool signA, signB; - uint32_t wordA, wordB; - - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - if ( f128M_isSignalingNaN( aPtr ) || f128M_isSignalingNaN( bPtr ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - uiA96 = aWPtr[indexWordHi( 4 )]; - uiB96 = bWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ); - if ( signA != signB ) { - if ( signB ) return false; - if ( (uiA96 | uiB96) & 0x7FFFFFFF ) return true; - wordA = aWPtr[indexWord( 4, 2 )]; - wordB = bWPtr[indexWord( 4, 2 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 1 )]; - wordB = bWPtr[indexWord( 4, 1 )]; - if ( wordA | wordB ) return true; - wordA = aWPtr[indexWord( 4, 0 )]; - wordB = bWPtr[indexWord( 4, 0 )]; - return ((wordA | wordB) != 0); - } - if ( signA ) { - aWPtr = (const uint32_t *) bPtr; - bWPtr = (const uint32_t *) aPtr; - } - return (softfloat_compare128M( aWPtr, bWPtr ) < 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_mul.c b/addins/SoftFloat-3e/source/f128M_mul.c deleted file mode 100644 index 4b8292a27..000000000 --- a/addins/SoftFloat-3e/source/f128M_mul.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_mul( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_mul( *aPtr, *bPtr ); - -} - -#else - -void - f128M_mul( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr; - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - bool signZ; - const uint32_t *ptr; - uint32_t uiZ96, sigA[4]; - uint_fast8_t shiftDist; - uint32_t sigB[4]; - int32_t expZ; - uint32_t sigProd[8], *extSigZPtr; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - signZ = signF128UI96( uiA96 ) ^ signF128UI96( uiB96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - ptr = aWPtr; - if ( ! expA ) goto possiblyInvalid; - if ( ! expB ) { - ptr = bWPtr; - possiblyInvalid: - if ( - ! fracF128UI96( ptr[indexWordHi( 4 )] ) - && ! (ptr[indexWord( 4, 2 )] | ptr[indexWord( 4, 1 )] - | ptr[indexWord( 4, 0 )]) - ) { - softfloat_invalidF128M( zWPtr ); - return; - } - } - uiZ96 = packToF128UI96( signZ, 0x7FFF, 0 ); - goto uiZ96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA ) { - sigA[indexWordHi( 4 )] = fracF128UI96( uiA96 ) | 0x00010000; - sigA[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sigA[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sigA[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - } else { - expA = softfloat_shiftNormSigF128M( aWPtr, 0, sigA ); - if ( expA == -128 ) goto zero; - } - if ( expB ) { - sigB[indexWordHi( 4 )] = fracF128UI96( uiB96 ) | 0x00010000; - sigB[indexWord( 4, 2 )] = bWPtr[indexWord( 4, 2 )]; - sigB[indexWord( 4, 1 )] = bWPtr[indexWord( 4, 1 )]; - sigB[indexWord( 4, 0 )] = bWPtr[indexWord( 4, 0 )]; - } else { - expB = softfloat_shiftNormSigF128M( bWPtr, 0, sigB ); - if ( expB == -128 ) goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x4000; - softfloat_mul128MTo256M( sigA, sigB, sigProd ); - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigZPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - shiftDist = 16; - if ( extSigZPtr[indexWordHi( 5 )] & 2 ) { - ++expZ; - shiftDist = 15; - } - softfloat_shortShiftLeft160M( extSigZPtr, shiftDist, extSigZPtr ); - softfloat_roundPackMToF128M( signZ, expZ, extSigZPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ96 = packToF128UI96( signZ, 0, 0 ); - uiZ96: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_mulAdd.c b/addins/SoftFloat-3e/source/f128M_mulAdd.c deleted file mode 100644 index 2b0b7fe26..000000000 --- a/addins/SoftFloat-3e/source/f128M_mulAdd.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - const uint64_t *aWPtr, *bWPtr, *cWPtr; - uint_fast64_t uiA64, uiA0; - uint_fast64_t uiB64, uiB0; - uint_fast64_t uiC64, uiC0; - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - cWPtr = (const uint64_t *) cPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - uiC64 = cWPtr[indexWord( 2, 1 )]; - uiC0 = cWPtr[indexWord( 2, 0 )]; - *zPtr = softfloat_mulAddF128( uiA64, uiA0, uiB64, uiB0, uiC64, uiC0, 0 ); - -} - -#else - -void - f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - - softfloat_mulAddF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (const uint32_t *) cPtr, - (uint32_t *) zPtr, - 0 - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_rem.c b/addins/SoftFloat-3e/source/f128M_rem.c deleted file mode 100644 index 39aafdd6a..000000000 --- a/addins/SoftFloat-3e/source/f128M_rem.c +++ /dev/null @@ -1,182 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_rem( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *zPtr = f128_rem( *aPtr, *bPtr ); - -} - -#else - -void - f128M_rem( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr, *bWPtr; - uint32_t *zWPtr, uiA96; - int32_t expA, expB; - uint32_t x[4], rem1[5], *remPtr; - bool signRem; - int32_t expDiff; - uint32_t q, recip32; - uint64_t q64; - uint32_t rem2[5], *altRemPtr, *newRemPtr, wordMeanRem; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - bWPtr = (const uint32_t *) bPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - expB = expF128UI96( bWPtr[indexWordHi( 4 )] ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - if ( expA == 0x7FFF ) goto invalid; - goto copyA; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA < expB - 1 ) goto copyA; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expB = softfloat_shiftNormSigF128M( bWPtr, 13, x ); - if ( expB == -128 ) goto invalid; - remPtr = &rem1[indexMultiwordLo( 5, 4 )]; - expA = softfloat_shiftNormSigF128M( aWPtr, 13, remPtr ); - if ( expA == -128 ) goto copyA; - signRem = signF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) goto copyA; - if ( expDiff ) { - --expB; - softfloat_add128M( x, x, x ); - q = 0; - } else { - q = (softfloat_compare128M( x, remPtr ) <= 0); - if ( q ) softfloat_sub128M( remPtr, x, remPtr ); - } - } else { - recip32 = - softfloat_approxRecip32_1( - ((uint64_t) x[indexWord( 4, 3 )]<<32 | x[indexWord( 4, 2 )]) - >>30 - ); - expDiff -= 30; - for (;;) { - q64 = (uint64_t) remPtr[indexWordHi( 4 )] * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - softfloat_remStep128MBy32( remPtr, 29, x, q, remPtr ); - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - softfloat_add128M( remPtr, x, remPtr ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - softfloat_remStep128MBy32( remPtr, expDiff + 30, x, q, remPtr ); - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - altRemPtr = &rem2[indexMultiwordLo( 5, 4 )]; - softfloat_add128M( remPtr, x, altRemPtr ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - altRemPtr = &rem2[indexMultiwordLo( 5, 4 )]; - do { - ++q; - newRemPtr = altRemPtr; - softfloat_sub128M( remPtr, x, newRemPtr ); - altRemPtr = remPtr; - remPtr = newRemPtr; - } while ( ! (remPtr[indexWordHi( 4 )] & 0x80000000) ); - selectRem: - softfloat_add128M( remPtr, altRemPtr, x ); - wordMeanRem = x[indexWordHi( 4 )]; - if ( - (wordMeanRem & 0x80000000) - || (! wordMeanRem && (q & 1) && ! x[indexWord( 4, 0 )] - && ! (x[indexWord( 4, 2 )] | x[indexWord( 4, 1 )])) - ) { - remPtr = altRemPtr; - } - if ( remPtr[indexWordHi( 4 )] & 0x80000000 ) { - signRem = ! signRem; - softfloat_negX128M( remPtr ); - } - remPtr -= indexMultiwordLo( 5, 4 ); - remPtr[indexWordHi( 5 )] = 0; - softfloat_normRoundPackMToF128M( signRem, expB + 18, remPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zWPtr[indexWordHi( 4 )] = uiA96; - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_roundToInt.c b/addins/SoftFloat-3e/source/f128M_roundToInt.c deleted file mode 100644 index b96d742b2..000000000 --- a/addins/SoftFloat-3e/source/f128M_roundToInt.c +++ /dev/null @@ -1,223 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - - *zPtr = f128_roundToInt( *aPtr, roundingMode, exact ); - -} - -#else - -void - f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - const uint32_t *aWPtr; - uint32_t *zWPtr; - uint32_t ui96; - int32_t exp; - uint32_t sigExtra; - bool sign; - uint_fast8_t bitPos; - bool roundNear; - unsigned int index, lastIndex; - bool extra; - uint32_t wordA, bit, wordZ; - uint_fast8_t carry; - uint32_t extrasMask; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ui96 = aWPtr[indexWordHi( 4 )]; - exp = expF128UI96( ui96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - sigExtra = aWPtr[indexWord( 4, 2 )]; - if ( !sigExtra ) { - sigExtra = aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )]; - } - if ( !sigExtra && !(ui96 & 0x7FFFFFFF) ) goto ui96; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - sign = signF128UI96( ui96 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF128UI96( ui96 ) && !sigExtra ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) goto mag1; - break; - case softfloat_round_min: - if ( sign ) goto mag1; - break; - case softfloat_round_max: - if ( !sign ) goto mag1; - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - goto mag1; -#endif - } - ui96 = packToF128UI96( sign, 0, 0 ); - goto ui96; - mag1: - ui96 = packToF128UI96( sign, 0x3FFF, 0 ); - goto ui96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x406F <= exp ) { - if ( - (exp == 0x7FFF) - && (fracF128UI96( ui96 ) - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ) { - softfloat_propagateNaNF128M( aWPtr, 0, zWPtr ); - return; - } - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - goto ui96; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - bitPos = 0x406F - exp; - roundNear = - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even); - bitPos -= roundNear; - index = indexWordLo( 4 ); - lastIndex = indexWordHi( 4 ); - extra = 0; - for (;;) { - wordA = aWPtr[index]; - if ( bitPos < 32 ) break; - if ( wordA ) extra = 1; - zWPtr[index] = 0; - index += wordIncr; - bitPos -= 32; - } - bit = (uint32_t) 1< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - - *zPtr = f128_sqrt( *aPtr ); - -} - -#else - -void f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - const uint32_t *aWPtr; - uint32_t *zWPtr; - uint32_t uiA96; - bool signA; - int32_t rawExpA; - uint32_t rem[6]; - int32_t expA, expZ; - uint64_t rem64; - uint32_t sig32A, recipSqrt32, sig32Z, qs[3], q; - uint64_t sig64Z; - uint32_t term[5]; - uint64_t x64; - uint32_t y[5], rem32; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - signA = signF128UI96( uiA96 ); - rawExpA = expF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( rawExpA == 0x7FFF ) { - if ( - fracF128UI96( uiA96 ) - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - ) { - softfloat_propagateNaNF128M( aWPtr, 0, zWPtr ); - return; - } - if ( ! signA ) goto copyA; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = softfloat_shiftNormSigF128M( aWPtr, 13 - (rawExpA & 1), rem ); - if ( expA == -128 ) goto copyA; - if ( signA ) goto invalid; - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFE; - expA &= 1; - rem64 = (uint64_t) rem[indexWord( 4, 3 )]<<32 | rem[indexWord( 4, 2 )]; - if ( expA ) { - if ( ! rawExpA ) { - softfloat_shortShiftRight128M( rem, 1, rem ); - rem64 >>= 1; - } - sig32A = rem64>>29; - } else { - sig32A = rem64>>30; - } - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint64_t) sig32A * recipSqrt32)>>32; - if ( expA ) sig32Z >>= 1; - qs[2] = sig32Z; - rem64 -= (uint64_t) sig32Z * sig32Z; - rem[indexWord( 4, 3 )] = rem64>>32; - rem[indexWord( 4, 2 )] = rem64; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - sig64Z = ((uint64_t) sig32Z<<32) + ((uint64_t) q<<3); - term[indexWord( 4, 3 )] = 0; - term[indexWord( 4, 0 )] = 0; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = ((uint64_t) sig32Z<<32) + sig64Z; - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - softfloat_remStep128MBy32( rem, 29, term, q, y ); - rem32 = y[indexWord( 4, 3 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - sig64Z -= 1<<3; - } - qs[1] = q; - rem64 = (uint64_t) rem32<<32 | y[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32; - if ( rem64>>34 ) q += recipSqrt32; - sig64Z <<= 1; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - x64 = sig64Z + (q>>26); - term[indexWord( 4, 2 )] = x64>>32; - term[indexWord( 4, 1 )] = x64; - term[indexWord( 4, 0 )] = q<<6; - softfloat_remStep128MBy32( - y, 29, term, q, &rem[indexMultiwordHi( 6, 4 )] ); - rem32 = rem[indexWordHi( 6 )]; - if ( ! (rem32 & 0x80000000) ) break; - --q; - } - qs[0] = q; - rem64 = (uint64_t) rem32<<32 | rem[indexWord( 6, 4 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((uint32_t) (rem64>>2) * (uint64_t) recipSqrt32)>>32) + 2; - if ( rem64>>34 ) q += recipSqrt32; - x64 = (uint64_t) q<<27; - y[indexWord( 5, 0 )] = x64; - x64 = ((uint64_t) qs[0]<<24) + (x64>>32); - y[indexWord( 5, 1 )] = x64; - x64 = ((uint64_t) qs[1]<<21) + (x64>>32); - y[indexWord( 5, 2 )] = x64; - x64 = ((uint64_t) qs[2]<<18) + (x64>>32); - y[indexWord( 5, 3 )] = x64; - y[indexWord( 5, 4 )] = x64>>32; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xF) <= 2 ) { - q &= ~3; - y[indexWordLo( 5 )] = q<<27; - term[indexWord( 5, 4 )] = 0; - term[indexWord( 5, 3 )] = 0; - term[indexWord( 5, 2 )] = 0; - term[indexWord( 5, 1 )] = q>>6; - term[indexWord( 5, 0 )] = q<<26; - softfloat_sub160M( y, term, term ); - rem[indexWord( 6, 1 )] = 0; - rem[indexWord( 6, 0 )] = 0; - softfloat_remStep160MBy32( - &rem[indexMultiwordLo( 6, 5 )], - 14, - term, - q, - &rem[indexMultiwordLo( 6, 5 )] - ); - rem32 = rem[indexWord( 6, 4 )]; - if ( rem32 & 0x80000000 ) { - softfloat_sub1X160M( y ); - } else { - if ( - rem32 || rem[indexWord( 6, 0 )] || rem[indexWord( 6, 1 )] - || (rem[indexWord( 6, 3 )] | rem[indexWord( 6, 2 )]) - ) { - y[indexWordLo( 5 )] |= 1; - } - } - } - softfloat_roundPackMToF128M( 0, expZ, y, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - copyA: - zWPtr[indexWordHi( 4 )] = uiA96; - zWPtr[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_sub.c b/addins/SoftFloat-3e/source/f128M_sub.c deleted file mode 100644 index 5d65c799f..000000000 --- a/addins/SoftFloat-3e/source/f128M_sub.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void - f128M_sub( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - const uint64_t *aWPtr, *bWPtr; - uint_fast64_t uiA64, uiA0; - bool signA; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - aWPtr = (const uint64_t *) aPtr; - bWPtr = (const uint64_t *) bPtr; - uiA64 = aWPtr[indexWord( 2, 1 )]; - uiA0 = aWPtr[indexWord( 2, 0 )]; - signA = signF128UI64( uiA64 ); - uiB64 = bWPtr[indexWord( 2, 1 )]; - uiB0 = bWPtr[indexWord( 2, 0 )]; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - *zPtr = softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - *zPtr = softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF128 : softfloat_addMagsF128; - *zPtr = (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - -#else - -void - f128M_sub( const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - softfloat_addF128M( - (const uint32_t *) aPtr, - (const uint32_t *) bPtr, - (uint32_t *) zPtr, - true - ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_extF80M.c b/addins/SoftFloat-3e/source/f128M_to_extF80M.c deleted file mode 100644 index b0340c794..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_extF80M.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - - *zPtr = f128_to_extF80( *aPtr ); - -} - -#else - -void f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - const uint32_t *aWPtr; - struct extFloat80M *zSPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - struct commonNaN commonNaN; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - zSPtr = (struct extFloat80M *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( softfloat_isNaNF128M( aWPtr ) ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - zSPtr->signExp = packToExtF80UI64( sign, 0x7FFF ); - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp = softfloat_shiftNormSigF128M( aWPtr, 15, sig ); - if ( exp == -128 ) { - zSPtr->signExp = packToExtF80UI64( sign, 0 ); - zSPtr->signif = 0; - return; - } - if ( sig[indexWord( 4, 0 )] ) sig[indexWord( 4, 1 )] |= 1; - softfloat_roundPackMToExtF80M( - sign, exp, &sig[indexMultiwordHi( 4, 3 )], 80, zSPtr ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f16.c b/addins/SoftFloat-3e/source/f128M_to_f16.c deleted file mode 100644 index 95109a771..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f16.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float16_t f128M_to_f16( const float128_t *aPtr ) -{ - - return f128_to_f16( *aPtr ); - -} - -#else - -float16_t f128M_to_f16( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t frac32; - struct commonNaN commonNaN; - uint16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac32 = - fracF128UI96( uiA96 ) - | ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac32 ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = frac32>>2 | (frac32 & 3); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, frac16 | 0x4000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f32.c b/addins/SoftFloat-3e/source/f128M_to_f32.c deleted file mode 100644 index 4542deb0c..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f32.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float32_t f128M_to_f32( const float128_t *aPtr ) -{ - - return f128_to_f32( *aPtr ); - -} - -#else - -float32_t f128M_to_f32( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t frac64; - struct commonNaN commonNaN; - uint32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac64 = - (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )] - | ((aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )]) != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac64, 18 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, frac32 | 0x40000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_f64.c b/addins/SoftFloat-3e/source/f128M_to_f64.c deleted file mode 100644 index 6213bb7f5..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_f64.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t f128M_to_f64( const float128_t *aPtr ) -{ - - return f128_to_f64( *aPtr ); - -} - -#else - -float64_t f128M_to_f64( const float128_t *aPtr ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t frac64; - struct commonNaN commonNaN; - uint64_t uiZ; - uint32_t frac32; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - frac64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 || aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) { - softfloat_f128MToCommonNaN( aWPtr, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = aWPtr[indexWord( 4, 1 )]; - frac64 = frac64<<14 | frac32>>18; - if ( (frac32 & 0x0003FFFF) || aWPtr[indexWord( 4, 0 )] ) frac64 |= 1; - if ( ! (exp | frac64) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return - softfloat_roundPackToF64( - sign, exp, frac64 | UINT64_C( 0x4000000000000000 ) ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i32.c b/addins/SoftFloat-3e/source/f128M_to_i32.c deleted file mode 100644 index 54cc6f603..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t - f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_i32( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast32_t - f128M_to_i32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c deleted file mode 100644 index 1f22039de..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i32_r_minMag.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_i32_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast32_t f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - uint32_t absZ, uiZ; - union { uint32_t ui; int32_t i; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x401F <= exp ) goto invalid; - shiftDist = 0x402F - exp; - sig64 |= UINT64_C( 0x0001000000000000 ); - absZ = sig64>>shiftDist; - uiZ = sign ? -absZ : absZ; - if ( uiZ>>31 != sign ) goto invalid; - if ( exact && ((uint64_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t - f128M_to_i64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_i64( *aPtr, roundingMode, exact ); - -} - -#else - -int_fast64_t - f128M_to_i64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x404F - exp; - if ( shiftDist < 17 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist, sig ); - return - softfloat_roundMToI64( - sign, sig + indexMultiwordLo( 4, 3 ), roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c deleted file mode 100644 index da3d28ad0..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_i64_r_minMag.c +++ /dev/null @@ -1,124 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -int_fast64_t f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_i64_r_minMag( *aPtr, exact ); - -} - -#else - -int_fast64_t f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - uint64_t uiZ; - union { uint64_t ui; int64_t i; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) goto invalid; - if ( exact ) { - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist + 17, sig ); - uiZ = (uint64_t) sig[indexWord( 4, 2 )]<<32 | sig[indexWord( 4, 1 )]; - if ( uiZ>>63 && (! sign || (uiZ != UINT64_C( 0x8000000000000000 ))) ) { - goto invalid; - } - if ( sig[indexWordLo( 4 )] ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } else { - if ( 64 <= shiftDist ) return 0; - uiZ = - (uint64_t) sig96<<47 - | (uint64_t) aWPtr[indexWord( 4, 2 )]<<15 - | aWPtr[indexWord( 4, 1 )]>>17; - if ( shiftDist ) { - uiZ |= UINT64_C( 0x8000000000000000 ); - uiZ >>= shiftDist; - } else { - if ( uiZ || ! sign ) goto invalid; - uiZ |= UINT64_C( 0x8000000000000000 ); - } - } - if ( sign ) uiZ = -uiZ; - uZ.ui = uiZ; - return uZ.i; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui32.c b/addins/SoftFloat-3e/source/f128M_to_ui32.c deleted file mode 100644 index c1baa063a..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t - f128M_to_ui32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_ui32( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast32_t - f128M_to_ui32( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c deleted file mode 100644 index a1aca621a..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_ui32_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - int32_t exp; - uint64_t sig64; - int32_t shiftDist; - bool sign; - uint32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - exp = expF128UI96( uiA96 ); - sig64 = (uint64_t) fracF128UI96( uiA96 )<<32 | aWPtr[indexWord( 4, 2 )]; - if ( aWPtr[indexWord( 4, 1 )] | aWPtr[indexWord( 4, 0 )] ) sig64 |= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI96( uiA96 ); - if ( sign || (shiftDist < 17) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - z = sig64>>shiftDist; - if ( exact && ((uint64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t - f128M_to_ui64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return f128_to_ui64( *aPtr, roundingMode, exact ); - -} - -#else - -uint_fast64_t - f128M_to_ui64( const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x404F - exp; - if ( shiftDist < 17 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist, sig ); - return - softfloat_roundMToUI64( - sign, sig + indexMultiwordLo( 4, 3 ), roundingMode, exact ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c deleted file mode 100644 index 7a1b60295..000000000 --- a/addins/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - - return f128_to_ui64_r_minMag( *aPtr, exact ); - -} - -#else - -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - const uint32_t *aWPtr; - uint32_t uiA96; - bool sign; - int32_t exp; - uint32_t sig96; - int32_t shiftDist; - uint32_t sig[4]; - uint64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - aWPtr = (const uint32_t *) aPtr; - uiA96 = aWPtr[indexWordHi( 4 )]; - sign = signF128UI96( uiA96 ); - exp = expF128UI96( uiA96 ); - sig96 = fracF128UI96( uiA96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x403E - exp; - if ( shiftDist < 0 ) goto invalid; - if ( exact ) { - if ( exp ) sig96 |= 0x00010000; - sig[indexWord( 4, 3 )] = sig96; - sig[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sig[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sig[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - softfloat_shiftRightJam128M( sig, shiftDist + 17, sig ); - z = (uint64_t) sig[indexWord( 4, 2 )]<<32 | sig[indexWord( 4, 1 )]; - if ( sign && z ) goto invalid; - if ( sig[indexWordLo( 4 )] ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } else { - if ( 64 <= shiftDist ) return 0; - if ( sign ) goto invalid; - z = UINT64_C( 0x8000000000000000 ) - | (uint64_t) sig96<<47 - | (uint64_t) aWPtr[indexWord( 4, 2 )]<<15 - | aWPtr[indexWord( 4, 1 )]>>17; - z >>= shiftDist; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) - && (sig96 - || (aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )])) - ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f128_add.c b/addins/SoftFloat-3e/source/f128_add.c deleted file mode 100644 index e9caba682..000000000 --- a/addins/SoftFloat-3e/source/f128_add.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_add( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF128 : softfloat_subMagsF128; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f128_div.c b/addins/SoftFloat-3e/source/f128_div.c deleted file mode 100644 index 0693db754..000000000 --- a/addins/SoftFloat-3e/source/f128_div.c +++ /dev/null @@ -1,199 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_div( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - struct uint128 rem; - uint_fast32_t recip32; - int ix; - uint_fast64_t q64; - uint_fast32_t q; - struct uint128 term; - uint_fast32_t qs[3]; - uint_fast64_t sigZExtra; - struct uint128 sigZ, uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) { - if ( ! (expA | sigA.v64 | sigA.v0) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FFE; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - rem = sigA; - if ( softfloat_lt128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ) ) { - --expZ; - rem = softfloat_add128( sigA.v64, sigA.v0, sigA.v64, sigA.v0 ); - } - recip32 = softfloat_approxRecip32_1( sigB.v64>>17 ); - ix = 3; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>19) * recip32; - q = (q64 + 0x80000000)>>32; - --ix; - if ( ix < 0 ) break; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - qs[ix] = q; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ((q + 1) & 7) < 2 ) { - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - --q; - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } else if ( softfloat_le128( sigB.v64, sigB.v0, rem.v64, rem.v0 ) ) { - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - if ( rem.v64 | rem.v0 ) q |= 1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZExtra = (uint64_t) ((uint_fast64_t) q<<60); - term = softfloat_shortShiftLeft128( 0, qs[1], 54 ); - sigZ = - softfloat_add128( - (uint_fast64_t) qs[2]<<19, ((uint_fast64_t) qs[0]<<25) + (q>>4), - term.v64, term.v0 - ); - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - goto uiZ0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ.v64 = packToF128UI64( signZ, 0, 0 ); - uiZ0: - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_eq.c b/addins/SoftFloat-3e/source/f128_eq.c deleted file mode 100644 index 9462fc2ab..000000000 --- a/addins/SoftFloat-3e/source/f128_eq.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_eq( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return - (uiA0 == uiB0) - && ( (uiA64 == uiB64) - || (! uiA0 && ! ((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_eq_signaling.c b/addins/SoftFloat-3e/source/f128_eq_signaling.c deleted file mode 100644 index 5d0819d29..000000000 --- a/addins/SoftFloat-3e/source/f128_eq_signaling.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_eq_signaling( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return - (uiA0 == uiB0) - && ( (uiA64 == uiB64) - || (! uiA0 && ! ((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_isSignalingNaN.c b/addins/SoftFloat-3e/source/f128_isSignalingNaN.c deleted file mode 100644 index a764ff6bf..000000000 --- a/addins/SoftFloat-3e/source/f128_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_isSignalingNaN( float128_t a ) -{ - union ui128_f128 uA; - - uA.f = a; - return softfloat_isSigNaNF128UI( uA.ui.v64, uA.ui.v0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_le.c b/addins/SoftFloat-3e/source/f128_le.c deleted file mode 100644 index 521a1cb03..000000000 --- a/addins/SoftFloat-3e/source/f128_le.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_le( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - || ! (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_le_quiet.c b/addins/SoftFloat-3e/source/f128_le_quiet.c deleted file mode 100644 index 820b28b81..000000000 --- a/addins/SoftFloat-3e/source/f128_le_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_le_quiet( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - || ! (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 == uiB64) && (uiA0 == uiB0)) - || (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_lt.c b/addins/SoftFloat-3e/source/f128_lt.c deleted file mode 100644 index fa46ae2bc..000000000 --- a/addins/SoftFloat-3e/source/f128_lt.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f128_lt( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - && (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_lt_quiet.c b/addins/SoftFloat-3e/source/f128_lt_quiet.c deleted file mode 100644 index d491de2f2..000000000 --- a/addins/SoftFloat-3e/source/f128_lt_quiet.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f128_lt_quiet( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signA, signB; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - if ( isNaNF128UI( uiA64, uiA0 ) || isNaNF128UI( uiB64, uiB0 ) ) { - if ( - softfloat_isSigNaNF128UI( uiA64, uiA0 ) - || softfloat_isSigNaNF128UI( uiB64, uiB0 ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF128UI64( uiA64 ); - signB = signF128UI64( uiB64 ); - return - (signA != signB) - ? signA - && (((uiA64 | uiB64) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - | uiA0 | uiB0) - : ((uiA64 != uiB64) || (uiA0 != uiB0)) - && (signA ^ softfloat_lt128( uiA64, uiA0, uiB64, uiB0 )); - -} - diff --git a/addins/SoftFloat-3e/source/f128_mul.c b/addins/SoftFloat-3e/source/f128_mul.c deleted file mode 100644 index 24af86a24..000000000 --- a/addins/SoftFloat-3e/source/f128_mul.c +++ /dev/null @@ -1,163 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_mul( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signZ; - uint_fast64_t magBits; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint64_t sig256Z[4]; - uint_fast64_t sigZExtra; - struct uint128 sigZ; - struct uint128_extra sig128Extra; - struct uint128 uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN; - } - magBits = expB | sigB.v64 | sigB.v0; - goto infArg; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - magBits = expA | sigA.v64 | sigA.v0; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto zero; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x4000; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 16 ); - softfloat_mul128To256M( sigA.v64, sigA.v0, sigB.v64, sigB.v0, sig256Z ); - sigZExtra = sig256Z[indexWord( 4, 1 )] | (sig256Z[indexWord( 4, 0 )] != 0); - sigZ = - softfloat_add128( - sig256Z[indexWord( 4, 3 )], sig256Z[indexWord( 4, 2 )], - sigA.v64, sigA.v0 - ); - if ( UINT64_C( 0x0002000000000000 ) <= sigZ.v64 ) { - ++expZ; - sig128Extra = - softfloat_shortShiftRightJam128Extra( - sigZ.v64, sigZ.v0, sigZExtra, 1 ); - sigZ = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - } - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - goto uiZ0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ.v64 = packToF128UI64( signZ, 0, 0 ); - uiZ0: - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_mulAdd.c b/addins/SoftFloat-3e/source/f128_mulAdd.c deleted file mode 100644 index c7272d4e0..000000000 --- a/addins/SoftFloat-3e/source/f128_mulAdd.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_mulAdd( float128_t a, float128_t b, float128_t c ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - union ui128_f128 uC; - uint_fast64_t uiC64, uiC0; - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - uC.f = c; - uiC64 = uC.ui.v64; - uiC0 = uC.ui.v0; - return softfloat_mulAddF128( uiA64, uiA0, uiB64, uiB0, uiC64, uiC0, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_rem.c b/addins/SoftFloat-3e/source/f128_rem.c deleted file mode 100644 index f525f697a..000000000 --- a/addins/SoftFloat-3e/source/f128_rem.c +++ /dev/null @@ -1,190 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_rem( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - int_fast32_t expB; - struct uint128 sigB; - struct exp32_sig128 normExpSig; - struct uint128 rem; - int_fast32_t expDiff; - uint_fast32_t q, recip32; - uint_fast64_t q64; - struct uint128 term, altRem, meanRem; - bool signRem; - struct uint128 uiZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN; - } - goto invalid; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto invalid; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) return a; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - rem = sigA; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - if ( expDiff ) { - --expB; - sigB = softfloat_add128( sigB.v64, sigB.v0, sigB.v64, sigB.v0 ); - q = 0; - } else { - q = softfloat_le128( sigB.v64, sigB.v0, rem.v64, rem.v0 ); - if ( q ) { - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - } - } else { - recip32 = softfloat_approxRecip32_1( sigB.v64>>17 ); - expDiff -= 30; - for (;;) { - q64 = (uint_fast64_t) (uint32_t) (rem.v64>>19) * recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - rem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, expDiff + 30 ); - term = softfloat_mul128By32( sigB.v64, sigB.v0, q ); - rem = softfloat_sub128( rem.v64, rem.v0, term.v64, term.v0 ); - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - altRem = softfloat_add128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem = softfloat_sub128( rem.v64, rem.v0, sigB.v64, sigB.v0 ); - } while ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = softfloat_add128( rem.v64, rem.v0, altRem.v64, altRem.v0 ); - if ( - (meanRem.v64 & UINT64_C( 0x8000000000000000 )) - || (! (meanRem.v64 | meanRem.v0) && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem.v64 & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = softfloat_sub128( 0, 0, rem.v64, rem.v0 ); - } - return softfloat_normRoundPackToF128( signRem, expB - 1, rem.v64, rem.v0 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_roundToInt.c b/addins/SoftFloat-3e/source/f128_roundToInt.c deleted file mode 100644 index 69185d6ef..000000000 --- a/addins/SoftFloat-3e/source/f128_roundToInt.c +++ /dev/null @@ -1,172 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - f128_roundToInt( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - struct uint128 uiZ; - uint_fast64_t lastBitMask0, roundBitsMask; - bool roundNearEven; - uint_fast64_t lastBitMask64; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x402F <= exp ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( 0x406F <= exp ) { - if ( (exp == 0x7FFF) && (fracF128UI64( uiA64 ) | uiA0) ) { - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, 0, 0 ); - goto uiZ; - } - return a; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - lastBitMask0 = (uint_fast64_t) 2<<(0x406E - exp); - roundBitsMask = lastBitMask0 - 1; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - roundNearEven = (roundingMode == softfloat_round_near_even); - if ( roundNearEven || (roundingMode == softfloat_round_near_maxMag) ) { - if ( exp == 0x402F ) { - if ( UINT64_C( 0x8000000000000000 ) <= uiZ.v0 ) { - ++uiZ.v64; - if ( - roundNearEven - && (uiZ.v0 == UINT64_C( 0x8000000000000000 )) - ) { - uiZ.v64 &= ~1; - } - } - } else { - uiZ = softfloat_add128( uiZ.v64, uiZ.v0, 0, lastBitMask0>>1 ); - if ( roundNearEven && !(uiZ.v0 & roundBitsMask) ) { - uiZ.v0 &= ~lastBitMask0; - } - } - } else if ( - roundingMode - == (signF128UI64( uiZ.v64 ) ? softfloat_round_min - : softfloat_round_max) - ) { - uiZ = softfloat_add128( uiZ.v64, uiZ.v0, 0, roundBitsMask ); - } - uiZ.v0 &= ~roundBitsMask; - lastBitMask64 = !lastBitMask0; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp < 0x3FFF ) { - if ( !((uiA64 & UINT64_C( 0x7FFFFFFFFFFFFFFF )) | uiA0) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ.v64 = uiA64 & packToF128UI64( 1, 0, 0 ); - uiZ.v0 = 0; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !(fracF128UI64( uiA64 ) | uiA0) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FFE ) uiZ.v64 |= packToF128UI64( 0, 0x3FFF, 0 ); - break; - case softfloat_round_min: - if ( uiZ.v64 ) uiZ.v64 = packToF128UI64( 1, 0x3FFF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ.v64 ) uiZ.v64 = packToF128UI64( 0, 0x3FFF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ.v64 |= packToF128UI64( 0, 0x3FFF, 0 ); - break; -#endif - } - goto uiZ; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - uiZ.v64 = uiA64; - uiZ.v0 = 0; - lastBitMask64 = (uint_fast64_t) 1<<(0x402F - exp); - roundBitsMask = lastBitMask64 - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ.v64 += lastBitMask64>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ.v64 += lastBitMask64>>1; - if ( !((uiZ.v64 & roundBitsMask) | uiA0) ) { - uiZ.v64 &= ~lastBitMask64; - } - } else if ( - roundingMode - == (signF128UI64( uiZ.v64 ) ? softfloat_round_min - : softfloat_round_max) - ) { - uiZ.v64 = (uiZ.v64 | (uiA0 != 0)) + roundBitsMask; - } - uiZ.v64 &= ~roundBitsMask; - lastBitMask0 = 0; - } - if ( (uiZ.v64 != uiA64) || (uiZ.v0 != uiA0) ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - uiZ.v64 |= lastBitMask64; - uiZ.v0 |= lastBitMask0; - } -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_sqrt.c b/addins/SoftFloat-3e/source/f128_sqrt.c deleted file mode 100644 index f1d9bac79..000000000 --- a/addins/SoftFloat-3e/source/f128_sqrt.c +++ /dev/null @@ -1,201 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f128_sqrt( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - int_fast32_t expA; - struct uint128 sigA, uiZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint_fast32_t sig32A, recipSqrt32, sig32Z; - struct uint128 rem; - uint32_t qs[3]; - uint_fast32_t q; - uint_fast64_t x64, sig64Z; - struct uint128 y, term; - uint_fast64_t sigZExtra; - struct uint128 sigZ; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) { - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, 0, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA.v64 | sigA.v0) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) return a; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FFF)>>1) + 0x3FFE; - expA &= 1; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sig32A = sigA.v64>>17; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sig32Z >>= 1; - rem = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 12 ); - } else { - rem = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 13 ); - } - qs[2] = sig32Z; - rem.v64 -= (uint_fast64_t) sig32Z * sig32Z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((uint32_t) (rem.v64>>2) * (uint_fast64_t) recipSqrt32)>>32; - x64 = (uint_fast64_t) sig32Z<<32; - sig64Z = x64 + ((uint_fast64_t) q<<3); - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_mul64ByShifted32To128( x64 + sig64Z, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - sig64Z -= 1<<3; - } - qs[1] = q; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = ((rem.v64>>2) * recipSqrt32)>>32; - y = softfloat_shortShiftLeft128( rem.v64, rem.v0, 29 ); - sig64Z <<= 1; - /*------------------------------------------------------------------------ - | (Repeating this loop is a rare occurrence.) - *------------------------------------------------------------------------*/ - for (;;) { - term = softfloat_shortShiftLeft128( 0, sig64Z, 32 ); - term = softfloat_add128( term.v64, term.v0, 0, (uint_fast64_t) q<<6 ); - term = softfloat_mul128By32( term.v64, term.v0, q ); - rem = softfloat_sub128( y.v64, y.v0, term.v64, term.v0 ); - if ( ! (rem.v64 & UINT64_C( 0x8000000000000000 )) ) break; - --q; - } - qs[0] = q; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - q = (((rem.v64>>2) * recipSqrt32)>>32) + 2; - sigZExtra = (uint64_t) ((uint_fast64_t) q<<59); - term = softfloat_shortShiftLeft128( 0, qs[1], 53 ); - sigZ = - softfloat_add128( - (uint_fast64_t) qs[2]<<18, ((uint_fast64_t) qs[0]<<24) + (q>>5), - term.v64, term.v0 - ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (q & 0xF) <= 2 ) { - q &= ~3; - sigZExtra = (uint64_t) ((uint_fast64_t) q<<59); - y = softfloat_shortShiftLeft128( sigZ.v64, sigZ.v0, 6 ); - y.v0 |= sigZExtra>>58; - term = softfloat_sub128( y.v64, y.v0, 0, q ); - y = softfloat_mul64ByShifted32To128( term.v0, q ); - term = softfloat_mul64ByShifted32To128( term.v64, q ); - term = softfloat_add128( term.v64, term.v0, 0, y.v64 ); - rem = softfloat_shortShiftLeft128( rem.v64, rem.v0, 20 ); - term = softfloat_sub128( term.v64, term.v0, rem.v64, rem.v0 ); - /*-------------------------------------------------------------------- - | The concatenation of `term' and `y.v0' is now the negative remainder - | (3 words altogether). - *--------------------------------------------------------------------*/ - if ( term.v64 & UINT64_C( 0x8000000000000000 ) ) { - sigZExtra |= 1; - } else { - if ( term.v64 | term.v0 | y.v0 ) { - if ( sigZExtra ) { - --sigZExtra; - } else { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, 0, 1 ); - sigZExtra = ~0; - } - } - } - } - return softfloat_roundPackToF128( 0, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_sub.c b/addins/SoftFloat-3e/source/f128_sub.c deleted file mode 100644 index 5181cc5ec..000000000 --- a/addins/SoftFloat-3e/source/f128_sub.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t f128_sub( float128_t a, float128_t b ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool signA; - union ui128_f128 uB; - uint_fast64_t uiB64, uiB0; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float128_t - (*magsFuncPtr)( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - signA = signF128UI64( uiA64 ); - uB.f = b; - uiB64 = uB.ui.v64; - uiB0 = uB.ui.v0; - signB = signF128UI64( uiB64 ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } else { - return softfloat_addMagsF128( uiA64, uiA0, uiB64, uiB0, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF128 : softfloat_addMagsF128; - return (*magsFuncPtr)( uiA64, uiA0, uiB64, uiB0, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_extF80.c b/addins/SoftFloat-3e/source/f128_to_extF80.c deleted file mode 100644 index ec169c0ff..000000000 --- a/addins/SoftFloat-3e/source/f128_to_extF80.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f128_to_extF80( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64, frac0; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp32_sig128 normExpSig; - struct uint128 sig128; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ); - frac0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 | frac0 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! (frac64 | frac0) ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF128Sig( frac64, frac0 ); - exp = normExpSig.exp; - frac64 = normExpSig.sig.v64; - frac0 = normExpSig.sig.v0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig128 = - softfloat_shortShiftLeft128( - frac64 | UINT64_C( 0x0001000000000000 ), frac0, 15 ); - return softfloat_roundPackToExtF80( sign, exp, sig128.v64, sig128.v0, 80 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f16.c b/addins/SoftFloat-3e/source/f128_to_f16.c deleted file mode 100644 index 5a8ee7212..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f16.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f128_to_f16( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = softfloat_shortShiftRightJam64( frac64, 34 ); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3FF1; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x40 ) exp = -0x40; - } - return softfloat_roundPackToF16( sign, exp, frac16 | 0x4000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f32.c b/addins/SoftFloat-3e/source/f128_to_f32.c deleted file mode 100644 index 07e4a80df..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f128_to_f32( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64; - struct commonNaN commonNaN; - uint_fast32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac64, 18 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3F81; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return softfloat_roundPackToF32( sign, exp, frac32 | 0x40000000 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_f64.c b/addins/SoftFloat-3e/source/f128_to_f64.c deleted file mode 100644 index f791938b4..000000000 --- a/addins/SoftFloat-3e/source/f128_to_f64.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f128_to_f64( float128_t a ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t frac64, frac0; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct uint128 frac128; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - frac64 = fracF128UI64( uiA64 ); - frac0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FFF ) { - if ( frac64 | frac0 ) { - softfloat_f128UIToCommonNaN( uiA64, uiA0, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac128 = softfloat_shortShiftLeft128( frac64, frac0, 14 ); - frac64 = frac128.v64 | (frac128.v0 != 0); - if ( ! (exp | frac64) ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - exp -= 0x3C01; - if ( sizeof (int_fast16_t) < sizeof (int_fast32_t) ) { - if ( exp < -0x1000 ) exp = -0x1000; - } - return - softfloat_roundPackToF64( - sign, exp, frac64 | UINT64_C( 0x4000000000000000 ) ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i32.c b/addins/SoftFloat-3e/source/f128_to_i32.c deleted file mode 100644 index 16c4a3ccd..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i32.c +++ /dev/null @@ -1,85 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f128_to_i32( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FFF) && (sig64 | sig0) ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sig64 |= (sig0 != 0); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c deleted file mode 100644 index 18cfeaee5..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i32_r_minMag.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f128_to_i32_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI64( uiA64 ); - if ( shiftDist < 18 ) { - if ( - sign && (shiftDist == 17) - && (sig64 < UINT64_C( 0x0000000000020000 )) - ) { - if ( exact && sig64 ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - absZ = sig64>>shiftDist; - if ( - exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f128_to_i64( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - struct uint128 sig128; - struct uint64_extra sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -15 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, -shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sigExtra = softfloat_shiftRightJam64Extra( sig64, sig0, shiftDist ); - sig64 = sigExtra.v; - sig0 = sigExtra.extra; - } - return softfloat_roundToI64( sign, sig64, sig0, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c deleted file mode 100644 index e2cc62e27..000000000 --- a/addins/SoftFloat-3e/source/f128_to_i64_r_minMag.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f128_to_i64_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - int_fast8_t negShiftDist; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist < 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -14 ) { - if ( - (uiA64 == UINT64_C( 0xC03E000000000000 )) - && (sig0 < UINT64_C( 0x0002000000000000 )) - ) { - if ( exact && sig0 ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - negShiftDist = -shiftDist; - absZ = sig64<>(shiftDist & 63); - if ( exact && (uint64_t) (sig0<>shiftDist; - if ( exact && (sig0 || (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - f128_to_ui32( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FFF) && sig64 ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - shiftDist = 0x4023 - exp; - if ( 0 < shiftDist ) { - sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - } - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c deleted file mode 100644 index 92facd517..000000000 --- a/addins/SoftFloat-3e/source/f128_to_ui32_r_minMag.c +++ /dev/null @@ -1,89 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f128_to_ui32_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - int_fast32_t exp; - uint_fast64_t sig64; - int_fast32_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ) | (uiA0 != 0); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( 49 <= shiftDist ) { - if ( exact && (exp | sig64) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF128UI64( uiA64 ); - if ( sign || (shiftDist < 17) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && sig64 ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - z = sig64>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - f128_to_ui64( float128_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - struct uint128 sig128; - struct uint64_extra sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -15 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FFF) && (sig64 | sig0) ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64 |= UINT64_C( 0x0001000000000000 ); - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, -shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( exp ) sig64 |= UINT64_C( 0x0001000000000000 ); - sigExtra = softfloat_shiftRightJam64Extra( sig64, sig0, shiftDist ); - sig64 = sigExtra.v; - sig0 = sigExtra.extra; - } - return softfloat_roundToUI64( sign, sig64, sig0, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c deleted file mode 100644 index edeafd3c8..000000000 --- a/addins/SoftFloat-3e/source/f128_to_ui64_r_minMag.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f128_to_ui64_r_minMag( float128_t a, bool exact ) -{ - union ui128_f128 uA; - uint_fast64_t uiA64, uiA0; - bool sign; - int_fast32_t exp; - uint_fast64_t sig64, sig0; - int_fast32_t shiftDist; - int_fast8_t negShiftDist; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA64 = uA.ui.v64; - uiA0 = uA.ui.v0; - sign = signF128UI64( uiA64 ); - exp = expF128UI64( uiA64 ); - sig64 = fracF128UI64( uiA64 ); - sig0 = uiA0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x402F - exp; - if ( shiftDist < 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( sign || (shiftDist < -15) ) goto invalid; - sig64 |= UINT64_C( 0x0001000000000000 ); - negShiftDist = -shiftDist; - z = sig64<>(shiftDist & 63); - if ( exact && (uint64_t) (sig0<>shiftDist; - if ( exact && (sig0 || (z< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_add( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float16_t (*magsFuncPtr)( uint_fast16_t, uint_fast16_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF16UI( uiA ^ uiB ) ) { - return softfloat_subMagsF16( uiA, uiB ); - } else { - return softfloat_addMagsF16( uiA, uiB ); - } -#else - magsFuncPtr = - signF16UI( uiA ^ uiB ) ? softfloat_subMagsF16 : softfloat_addMagsF16; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_div.c b/addins/SoftFloat-3e/source/f16_div.c deleted file mode 100644 index 77f9a2cd2..000000000 --- a/addins/SoftFloat-3e/source/f16_div.c +++ /dev/null @@ -1,186 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extern const uint16_t softfloat_approxRecip_1k0s[]; -extern const uint16_t softfloat_approxRecip_1k1s[]; - -float16_t f16_div( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signZ; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; -#ifdef SOFTFLOAT_FAST_DIV32TO16 - uint_fast32_t sig32A; - uint_fast16_t sigZ; -#else - int index; - uint16_t r0; - uint_fast16_t sigZ, rem; -#endif - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0xE; - sigA |= 0x0400; - sigB |= 0x0400; -#ifdef SOFTFLOAT_FAST_DIV32TO16 - if ( sigA < sigB ) { - --expZ; - sig32A = (uint_fast32_t) sigA<<15; - } else { - sig32A = (uint_fast32_t) sigA<<14; - } - sigZ = sig32A / sigB; - if ( ! (sigZ & 7) ) sigZ |= ((uint_fast32_t) sigB * sigZ != sig32A); -#else - if ( sigA < sigB ) { - --expZ; - sigA <<= 5; - } else { - sigA <<= 4; - } - index = sigB>>6 & 0xF; - r0 = softfloat_approxRecip_1k0s[index] - - (((uint_fast32_t) softfloat_approxRecip_1k1s[index] - * (sigB & 0x3F)) - >>10); - sigZ = ((uint_fast32_t) sigA * r0)>>16; - rem = (sigA<<10) - sigZ * sigB; - sigZ += (rem * (uint_fast32_t) r0)>>26; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ++sigZ; - if ( ! (sigZ & 7) ) { - sigZ &= ~1; - rem = (sigA<<10) - sigZ * sigB; - if ( rem & 0x8000 ) { - sigZ -= 2; - } else { - if ( rem ) sigZ |= 1; - } - } -#endif - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF16UI( signZ, 0x1F, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF16UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_eq.c b/addins/SoftFloat-3e/source/f16_eq.c deleted file mode 100644 index 692fa035f..000000000 --- a/addins/SoftFloat-3e/source/f16_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_eq( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! (uint16_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f16_eq_signaling.c b/addins/SoftFloat-3e/source/f16_eq_signaling.c deleted file mode 100644 index c1e7a509c..000000000 --- a/addins/SoftFloat-3e/source/f16_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_eq_signaling( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! (uint16_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f16_isSignalingNaN.c b/addins/SoftFloat-3e/source/f16_isSignalingNaN.c deleted file mode 100644 index 3eb3d4cc6..000000000 --- a/addins/SoftFloat-3e/source/f16_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_isSignalingNaN( float16_t a ) -{ - union ui16_f16 uA; - - uA.f = a; - return softfloat_isSigNaNF16UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_le.c b/addins/SoftFloat-3e/source/f16_le.c deleted file mode 100644 index d7313debd..000000000 --- a/addins/SoftFloat-3e/source/f16_le.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_le( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA || ! (uint16_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_le_quiet.c b/addins/SoftFloat-3e/source/f16_le_quiet.c deleted file mode 100644 index 15181c260..000000000 --- a/addins/SoftFloat-3e/source/f16_le_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_le_quiet( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA || ! (uint16_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_lt.c b/addins/SoftFloat-3e/source/f16_lt.c deleted file mode 100644 index 7745699a2..000000000 --- a/addins/SoftFloat-3e/source/f16_lt.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f16_lt( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA && ((uint16_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_lt_quiet.c b/addins/SoftFloat-3e/source/f16_lt_quiet.c deleted file mode 100644 index a31e4a13f..000000000 --- a/addins/SoftFloat-3e/source/f16_lt_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f16_lt_quiet( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF16UI( uiA ) || isNaNF16UI( uiB ) ) { - if ( - softfloat_isSigNaNF16UI( uiA ) || softfloat_isSigNaNF16UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF16UI( uiA ); - signB = signF16UI( uiB ); - return - (signA != signB) ? signA && ((uint16_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f16_mul.c b/addins/SoftFloat-3e/source/f16_mul.c deleted file mode 100644 index a47cab8ce..000000000 --- a/addins/SoftFloat-3e/source/f16_mul.c +++ /dev/null @@ -1,140 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_mul( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signZ; - uint_fast16_t magBits; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; - uint_fast32_t sig32Z; - uint_fast16_t sigZ, uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0xF; - sigA = (sigA | 0x0400)<<4; - sigB = (sigB | 0x0400)<<5; - sig32Z = (uint_fast32_t) sigA * sigB; - sigZ = sig32Z>>16; - if ( sig32Z & 0xFFFF ) sigZ |= 1; - if ( sigZ < 0x4000 ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - } else { - uiZ = packToF16UI( signZ, 0x1F, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF16UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_mulAdd.c b/addins/SoftFloat-3e/source/f16_mulAdd.c deleted file mode 100644 index e97571ac5..000000000 --- a/addins/SoftFloat-3e/source/f16_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_mulAdd( float16_t a, float16_t b, float16_t c ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; - union ui16_f16 uC; - uint_fast16_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF16( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_rem.c b/addins/SoftFloat-3e/source/f16_rem.c deleted file mode 100644 index 0ffa498a1..000000000 --- a/addins/SoftFloat-3e/source/f16_rem.c +++ /dev/null @@ -1,171 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_rem( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - union ui16_f16 uB; - uint_fast16_t uiB; - int_fast8_t expB; - uint_fast16_t sigB; - struct exp8_sig16 normExpSig; - uint16_t rem; - int_fast8_t expDiff; - uint_fast16_t q; - uint32_t recip32, q32; - uint16_t altRem, meanRem; - bool signRem; - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | 0x0400; - sigB |= 0x0400; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 3; - if ( expDiff ) { - rem <<= 2; - q = 0; - } else { - rem <<= 3; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( (uint_fast32_t) sigB<<21 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 4; - expDiff -= 31; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | which is believed to be the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 3; - for (;;) { - q32 = (rem * (uint_fast64_t) recip32)>>16; - if ( expDiff < 0 ) break; - rem = -((uint_fast16_t) q32 * sigB); - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -30 here.) - *--------------------------------------------------------------------*/ - q32 >>= ~expDiff & 31; - q = q32; - rem = (rem<<(expDiff + 30)) - q * sigB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & 0x8000) ); - meanRem = rem + altRem; - if ( (meanRem & 0x8000) || (! meanRem && (q & 1)) ) rem = altRem; - signRem = signA; - if ( 0x8000 <= rem ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF16( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_roundToInt.c b/addins/SoftFloat-3e/source/f16_roundToInt.c deleted file mode 100644 index a567d51d9..000000000 --- a/addins/SoftFloat-3e/source/f16_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f16_roundToInt( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t uiZ, lastBitMask, roundBitsMask; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0xE ) { - if ( !(uint16_t) (uiA<<1) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF16UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF16UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0xE ) uiZ |= packToF16UI( 0, 0xF, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF16UI( 1, 0xF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF16UI( 0, 0xF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF16UI( 0, 0xF, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x19 <= exp ) { - if ( (exp == 0x1F) && fracF16UI( uiA ) ) { - uiZ = softfloat_propagateNaNF16UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast16_t) 1<<(0x19 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF16UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_sqrt.c b/addins/SoftFloat-3e/source/f16_sqrt.c deleted file mode 100644 index 47a3bbf14..000000000 --- a/addins/SoftFloat-3e/source/f16_sqrt.c +++ /dev/null @@ -1,136 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[]; - -float16_t f16_sqrt( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool signA; - int_fast8_t expA; - uint_fast16_t sigA, uiZ; - struct exp8_sig16 normExpSig; - int_fast8_t expZ; - int index; - uint_fast16_t r0; - uint_fast32_t ESqrR0; - uint16_t sigma0; - uint_fast16_t recipSqrt16, sigZ, shiftedSigZ; - uint16_t negRem; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF16UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0xF)>>1) + 0xE; - expA &= 1; - sigA |= 0x0400; - index = (sigA>>6 & 0xE) + expA; - r0 = softfloat_approxRecipSqrt_1k0s[index] - - (((uint_fast32_t) softfloat_approxRecipSqrt_1k1s[index] - * (sigA & 0x7F)) - >>11); - ESqrR0 = ((uint_fast32_t) r0 * r0)>>1; - if ( expA ) ESqrR0 >>= 1; - sigma0 = ~(uint_fast16_t) ((ESqrR0 * sigA)>>16); - recipSqrt16 = r0 + (((uint_fast32_t) r0 * sigma0)>>25); - if ( ! (recipSqrt16 & 0x8000) ) recipSqrt16 = 0x8000; - sigZ = ((uint_fast32_t) (sigA<<5) * recipSqrt16)>>16; - if ( expA ) sigZ >>= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - ++sigZ; - if ( ! (sigZ & 7) ) { - shiftedSigZ = sigZ>>1; - negRem = shiftedSigZ * shiftedSigZ; - sigZ &= ~1; - if ( negRem & 0x8000 ) { - sigZ |= 1; - } else { - if ( negRem ) --sigZ; - } - } - return softfloat_roundPackToF16( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_sub.c b/addins/SoftFloat-3e/source/f16_sub.c deleted file mode 100644 index 03a87cf32..000000000 --- a/addins/SoftFloat-3e/source/f16_sub.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t f16_sub( float16_t a, float16_t b ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - union ui16_f16 uB; - uint_fast16_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float16_t (*magsFuncPtr)( uint_fast16_t, uint_fast16_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF16UI( uiA ^ uiB ) ) { - return softfloat_addMagsF16( uiA, uiB ); - } else { - return softfloat_subMagsF16( uiA, uiB ); - } -#else - magsFuncPtr = - signF16UI( uiA ^ uiB ) ? softfloat_addMagsF16 : softfloat_subMagsF16; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_extF80.c b/addins/SoftFloat-3e/source/f16_to_extF80.c deleted file mode 100644 index 99c2dfc74..000000000 --- a/addins/SoftFloat-3e/source/f16_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f16_to_extF80( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp8_sig16 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3FF0 ); - uiZ0 = (uint_fast64_t) (frac | 0x0400)<<53; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_extF80M.c b/addins/SoftFloat-3e/source/f16_to_extF80M.c deleted file mode 100644 index 7f2d53458..000000000 --- a/addins/SoftFloat-3e/source/f16_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f16_to_extF80( a ); - -} - -#else - -void f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui16_f16 uA; - uint16_t uiA; - bool sign; - int_fast8_t exp; - uint16_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint32_t uiZ32; - struct exp8_sig16 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ32 = 0x80000000; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ32 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3FF0 ); - uiZ32 = 0x80000000 | (uint32_t) frac<<21; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = (uint64_t) uiZ32<<32; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f16_to_f128.c b/addins/SoftFloat-3e/source/f16_to_f128.c deleted file mode 100644 index c4b81dc84..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f128.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f16_to_f128( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp8_sig16 normExpSig; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ.v64 = packToF128UI64( sign, exp + 0x3FF0, (uint_fast64_t) frac<<38 ); - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_f128M.c b/addins/SoftFloat-3e/source/f16_to_f128M.c deleted file mode 100644 index b4fc873b5..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f128M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - - *zPtr = f16_to_f128( a ); - -} - -#else - -void f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui16_f16 uA; - uint16_t uiA; - bool sign; - int_fast8_t exp; - uint16_t frac; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp8_sig16 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ96 = packToF128UI96( sign, exp + 0x3FF0, (uint32_t) frac<<6 ); - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f16_to_f32.c b/addins/SoftFloat-3e/source/f16_to_f32.c deleted file mode 100644 index a219454bf..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f32.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f16_to_f32( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - uint_fast32_t uiZ; - struct exp8_sig16 normExpSig; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF32UI( sign, exp + 0x70, (uint_fast32_t) frac<<13 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_f64.c b/addins/SoftFloat-3e/source/f16_to_f64.c deleted file mode 100644 index 7e87c25f4..000000000 --- a/addins/SoftFloat-3e/source/f16_to_f64.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f16_to_f64( float16_t a ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct exp8_sig16 normExpSig; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - if ( frac ) { - softfloat_f16UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF16Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF64UI( sign, exp + 0x3F0, (uint_fast64_t) frac<<42 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i32.c b/addins/SoftFloat-3e/source/f16_to_i32.c deleted file mode 100644 index 805c4e550..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i32.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f16_to_i32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - int_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( 0 <= shiftDist ) { - sig32 <<= shiftDist; - return sign ? -sig32 : sig32; - } - shiftDist = exp - 0x0D; - if ( 0 < shiftDist ) sig32 <<= shiftDist; - } - return - softfloat_roundToI32( - sign, (uint_fast32_t) sig32, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c deleted file mode 100644 index b1f996371..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f16_to_i32_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - int_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (int_fast32_t) (frac | 0x0400)<>= 10; - return sign ? -alignedSig : alignedSig; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i64.c b/addins/SoftFloat-3e/source/f16_to_i64.c deleted file mode 100644 index e3c0065f6..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i64.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f16_to_i64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - int_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( 0 <= shiftDist ) { - sig32 <<= shiftDist; - return sign ? -sig32 : sig32; - } - shiftDist = exp - 0x0D; - if ( 0 < shiftDist ) sig32 <<= shiftDist; - } - return - softfloat_roundToI32( - sign, (uint_fast32_t) sig32, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c deleted file mode 100644 index a5a6a077e..000000000 --- a/addins/SoftFloat-3e/source/f16_to_i64_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f16_to_i64_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - int_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (int_fast32_t) (frac | 0x0400)<>= 10; - return sign ? -alignedSig : alignedSig; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui32.c b/addins/SoftFloat-3e/source/f16_to_ui32.c deleted file mode 100644 index 5371ca339..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f16_to_ui32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - uint_fast32_t sig32; - int_fast8_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( (0 <= shiftDist) && ! sign ) { - return sig32< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f16_to_ui32_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - uint_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( sign || (exp == 0x1F) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (uint_fast32_t) (frac | 0x0400)<>10; - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui64.c b/addins/SoftFloat-3e/source/f16_to_ui64.c deleted file mode 100644 index e6cb000f1..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui64.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f16_to_ui64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - bool sign; - int_fast8_t exp; - uint_fast16_t frac; - uint_fast32_t sig32; - int_fast8_t shiftDist; -#ifndef SOFTFLOAT_FAST_INT64 - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF16UI( uiA ); - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x1F ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - frac ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig32 = frac; - if ( exp ) { - sig32 |= 0x0400; - shiftDist = exp - 0x19; - if ( (0 <= shiftDist) && ! sign ) { - return sig32<>12, (uint_fast64_t) sig32<<52, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = 0; - extSig[indexWord( 3, 1 )] = sig32>>12; - extSig[indexWord( 3, 0 )] = sig32<<20; - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c deleted file mode 100644 index b4f975f83..000000000 --- a/addins/SoftFloat-3e/source/f16_to_ui64_r_minMag.c +++ /dev/null @@ -1,87 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f16_to_ui64_r_minMag( float16_t a, bool exact ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast16_t frac; - int_fast8_t shiftDist; - bool sign; - uint_fast32_t alignedSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF16UI( uiA ); - frac = fracF16UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = exp - 0x0F; - if ( shiftDist < 0 ) { - if ( exact && (exp | frac) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF16UI( uiA ); - if ( sign || (exp == 0x1F) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x1F) && frac ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - alignedSig = (uint_fast32_t) (frac | 0x0400)<>10; - -} - diff --git a/addins/SoftFloat-3e/source/f32_add.c b/addins/SoftFloat-3e/source/f32_add.c deleted file mode 100644 index 70e03e7f9..000000000 --- a/addins/SoftFloat-3e/source/f32_add.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_add( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float32_t (*magsFuncPtr)( uint_fast32_t, uint_fast32_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF32UI( uiA ^ uiB ) ) { - return softfloat_subMagsF32( uiA, uiB ); - } else { - return softfloat_addMagsF32( uiA, uiB ); - } -#else - magsFuncPtr = - signF32UI( uiA ^ uiB ) ? softfloat_subMagsF32 : softfloat_addMagsF32; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_div.c b/addins/SoftFloat-3e/source/f32_div.c deleted file mode 100644 index 05ec701f7..000000000 --- a/addins/SoftFloat-3e/source/f32_div.c +++ /dev/null @@ -1,180 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_div( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signZ; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; -#ifdef SOFTFLOAT_FAST_DIV64TO32 - uint_fast64_t sig64A; - uint_fast32_t sigZ; -#else - uint_fast32_t sigZ; - uint_fast64_t rem; -#endif - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x7E; - sigA |= 0x00800000; - sigB |= 0x00800000; -#ifdef SOFTFLOAT_FAST_DIV64TO32 - if ( sigA < sigB ) { - --expZ; - sig64A = (uint_fast64_t) sigA<<31; - } else { - sig64A = (uint_fast64_t) sigA<<30; - } - sigZ = sig64A / sigB; - if ( ! (sigZ & 0x3F) ) sigZ |= ((uint_fast64_t) sigB * sigZ != sig64A); -#else - if ( sigA < sigB ) { - --expZ; - sigA <<= 8; - } else { - sigA <<= 7; - } - sigB <<= 8; - sigZ = ((uint_fast64_t) sigA * softfloat_approxRecip32_1( sigB ))>>32; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ += 2; - if ( (sigZ & 0x3F) < 2 ) { - sigZ &= ~3; -#ifdef SOFTFLOAT_FAST_INT64 - rem = ((uint_fast64_t) sigA<<31) - (uint_fast64_t) sigZ * sigB; -#else - rem = ((uint_fast64_t) sigA<<32) - (uint_fast64_t) (sigZ<<1) * sigB; -#endif - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - sigZ -= 4; - } else { - if ( rem ) sigZ |= 1; - } - } -#endif - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF32UI( signZ, 0xFF, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF32UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_eq.c b/addins/SoftFloat-3e/source/f32_eq.c deleted file mode 100644 index 801bbfd73..000000000 --- a/addins/SoftFloat-3e/source/f32_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_eq( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! (uint32_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f32_eq_signaling.c b/addins/SoftFloat-3e/source/f32_eq_signaling.c deleted file mode 100644 index 4c610ffae..000000000 --- a/addins/SoftFloat-3e/source/f32_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_eq_signaling( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! (uint32_t) ((uiA | uiB)<<1); - -} - diff --git a/addins/SoftFloat-3e/source/f32_isSignalingNaN.c b/addins/SoftFloat-3e/source/f32_isSignalingNaN.c deleted file mode 100644 index f5954cbbc..000000000 --- a/addins/SoftFloat-3e/source/f32_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_isSignalingNaN( float32_t a ) -{ - union ui32_f32 uA; - - uA.f = a; - return softfloat_isSigNaNF32UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_le.c b/addins/SoftFloat-3e/source/f32_le.c deleted file mode 100644 index d89d1e88d..000000000 --- a/addins/SoftFloat-3e/source/f32_le.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_le( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA || ! (uint32_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_le_quiet.c b/addins/SoftFloat-3e/source/f32_le_quiet.c deleted file mode 100644 index c2d4297a2..000000000 --- a/addins/SoftFloat-3e/source/f32_le_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_le_quiet( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA || ! (uint32_t) ((uiA | uiB)<<1) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_lt.c b/addins/SoftFloat-3e/source/f32_lt.c deleted file mode 100644 index 5b5fd2282..000000000 --- a/addins/SoftFloat-3e/source/f32_lt.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f32_lt( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA && ((uint32_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_lt_quiet.c b/addins/SoftFloat-3e/source/f32_lt_quiet.c deleted file mode 100644 index 015388143..000000000 --- a/addins/SoftFloat-3e/source/f32_lt_quiet.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f32_lt_quiet( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF32UI( uiA ) || isNaNF32UI( uiB ) ) { - if ( - softfloat_isSigNaNF32UI( uiA ) || softfloat_isSigNaNF32UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF32UI( uiA ); - signB = signF32UI( uiB ); - return - (signA != signB) ? signA && ((uint32_t) ((uiA | uiB)<<1) != 0) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f32_mul.c b/addins/SoftFloat-3e/source/f32_mul.c deleted file mode 100644 index f5c856002..000000000 --- a/addins/SoftFloat-3e/source/f32_mul.c +++ /dev/null @@ -1,137 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_mul( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signZ; - uint_fast32_t magBits; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; - uint_fast32_t sigZ, uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x7F; - sigA = (sigA | 0x00800000)<<7; - sigB = (sigB | 0x00800000)<<8; - sigZ = softfloat_shortShiftRightJam64( (uint_fast64_t) sigA * sigB, 32 ); - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - } else { - uiZ = packToF32UI( signZ, 0xFF, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF32UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_mulAdd.c b/addins/SoftFloat-3e/source/f32_mulAdd.c deleted file mode 100644 index 9a28e212c..000000000 --- a/addins/SoftFloat-3e/source/f32_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; - union ui32_f32 uC; - uint_fast32_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF32( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_rem.c b/addins/SoftFloat-3e/source/f32_rem.c deleted file mode 100644 index b29bf416e..000000000 --- a/addins/SoftFloat-3e/source/f32_rem.c +++ /dev/null @@ -1,168 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_rem( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - union ui32_f32 uB; - uint_fast32_t uiB; - int_fast16_t expB; - uint_fast32_t sigB; - struct exp16_sig32 normExpSig; - uint32_t rem; - int_fast16_t expDiff; - uint32_t q, recip32, altRem, meanRem; - bool signRem; - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | 0x00800000; - sigB |= 0x00800000; - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 6; - if ( expDiff ) { - rem <<= 5; - q = 0; - } else { - rem <<= 6; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( sigB<<8 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 7; - expDiff -= 31; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | which is believed to be the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 6; - for (;;) { - q = (rem * (uint_fast64_t) recip32)>>32; - if ( expDiff < 0 ) break; - rem = -(q * (uint32_t) sigB); - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -30 here.) - *--------------------------------------------------------------------*/ - q >>= ~expDiff & 31; - rem = (rem<<(expDiff + 30)) - q * (uint32_t) sigB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & 0x80000000) ); - meanRem = rem + altRem; - if ( (meanRem & 0x80000000) || (! meanRem && (q & 1)) ) rem = altRem; - signRem = signA; - if ( 0x80000000 <= rem ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF32( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_roundToInt.c b/addins/SoftFloat-3e/source/f32_roundToInt.c deleted file mode 100644 index 305af79dd..000000000 --- a/addins/SoftFloat-3e/source/f32_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_roundToInt( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t uiZ, lastBitMask, roundBitsMask; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x7E ) { - if ( !(uint32_t) (uiA<<1) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF32UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF32UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x7E ) uiZ |= packToF32UI( 0, 0x7F, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF32UI( 1, 0x7F, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF32UI( 0, 0x7F, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF32UI( 0, 0x7F, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x96 <= exp ) { - if ( (exp == 0xFF) && fracF32UI( uiA ) ) { - uiZ = softfloat_propagateNaNF32UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast32_t) 1<<(0x96 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF32UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_sqrt.c b/addins/SoftFloat-3e/source/f32_sqrt.c deleted file mode 100644 index 9263bde59..000000000 --- a/addins/SoftFloat-3e/source/f32_sqrt.c +++ /dev/null @@ -1,121 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f32_sqrt( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool signA; - int_fast16_t expA; - uint_fast32_t sigA, uiZ; - struct exp16_sig32 normExpSig; - int_fast16_t expZ; - uint_fast32_t sigZ, shiftedSigZ; - uint32_t negRem; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF32UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x7F)>>1) + 0x7E; - expA &= 1; - sigA = (sigA | 0x00800000)<<8; - sigZ = - ((uint_fast64_t) sigA * softfloat_approxRecipSqrt32_1( expA, sigA )) - >>32; - if ( expA ) sigZ >>= 1; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sigZ += 2; - if ( (sigZ & 0x3F) < 2 ) { - shiftedSigZ = sigZ>>2; - negRem = shiftedSigZ * shiftedSigZ; - sigZ &= ~3; - if ( negRem & 0x80000000 ) { - sigZ |= 1; - } else { - if ( negRem ) --sigZ; - } - } - return softfloat_roundPackToF32( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_sub.c b/addins/SoftFloat-3e/source/f32_sub.c deleted file mode 100644 index 383484dae..000000000 --- a/addins/SoftFloat-3e/source/f32_sub.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t f32_sub( float32_t a, float32_t b ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - union ui32_f32 uB; - uint_fast32_t uiB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 1) - float32_t (*magsFuncPtr)( uint_fast32_t, uint_fast32_t ); -#endif - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) - if ( signF32UI( uiA ^ uiB ) ) { - return softfloat_addMagsF32( uiA, uiB ); - } else { - return softfloat_subMagsF32( uiA, uiB ); - } -#else - magsFuncPtr = - signF32UI( uiA ^ uiB ) ? softfloat_addMagsF32 : softfloat_subMagsF32; - return (*magsFuncPtr)( uiA, uiB ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_extF80.c b/addins/SoftFloat-3e/source/f32_to_extF80.c deleted file mode 100644 index 742ed649c..000000000 --- a/addins/SoftFloat-3e/source/f32_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f32_to_extF80( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp16_sig32 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3F80 ); - uiZ0 = (uint_fast64_t) (frac | 0x00800000)<<40; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_extF80M.c b/addins/SoftFloat-3e/source/f32_to_extF80M.c deleted file mode 100644 index af7e32a76..000000000 --- a/addins/SoftFloat-3e/source/f32_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f32_to_extF80( a ); - -} - -#else - -void f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui32_f32 uA; - uint32_t uiA; - bool sign; - int_fast16_t exp; - uint32_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint32_t uiZ32; - struct exp16_sig32 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ32 = 0x80000000; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ32 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3F80 ); - uiZ32 = 0x80000000 | (uint32_t) frac<<8; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = (uint64_t) uiZ32<<32; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f32_to_f128.c b/addins/SoftFloat-3e/source/f32_to_f128.c deleted file mode 100644 index 6a765a44e..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f128.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f32_to_f128( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp16_sig32 normExpSig; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ.v64 = packToF128UI64( sign, exp + 0x3F80, (uint_fast64_t) frac<<25 ); - uiZ.v0 = 0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_f128M.c b/addins/SoftFloat-3e/source/f32_to_f128M.c deleted file mode 100644 index ee7e6b367..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f128M.c +++ /dev/null @@ -1,115 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - - *zPtr = f32_to_f128( a ); - -} - -#else - -void f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui32_f32 uA; - uint32_t uiA; - bool sign; - int_fast16_t exp; - uint32_t frac, uiZ64; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp16_sig32 normExpSig; - uint64_t frac64; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = 0; - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac64 = (uint64_t) frac<<25; - uiZ96 = packToF128UI96( sign, exp + 0x3F80, frac64>>32 ); - uiZ64 = frac64; - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f32_to_f16.c b/addins/SoftFloat-3e/source/f32_to_f16.c deleted file mode 100644 index a9e77b775..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f16.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f32_to_f16( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = frac>>9 | ((frac & 0x1FF) != 0); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF16( sign, exp - 0x71, frac16 | 0x4000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_f64.c b/addins/SoftFloat-3e/source/f32_to_f64.c deleted file mode 100644 index 4f97519e8..000000000 --- a/addins/SoftFloat-3e/source/f32_to_f64.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f32_to_f64( float32_t a ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t frac; - struct commonNaN commonNaN; - uint_fast64_t uiZ; - struct exp16_sig32 normExpSig; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - frac = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0xFF ) { - if ( frac ) { - softfloat_f32UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF64UI( &commonNaN ); - } else { - uiZ = packToF64UI( sign, 0x7FF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ = packToF64UI( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF32Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = packToF64UI( sign, exp + 0x380, (uint_fast64_t) frac<<29 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i32.c b/addins/SoftFloat-3e/source/f32_to_i32.c deleted file mode 100644 index 7d0356fbe..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f32_to_i32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - uint_fast64_t sig64; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0xFF) && sig ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<32; - shiftDist = 0xAA - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c deleted file mode 100644 index 7652f2ebb..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i32_r_minMag.c +++ /dev/null @@ -1,89 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f32_to_i32_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x9E - exp; - if ( 32 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( shiftDist <= 0 ) { - if ( uiA == packToF32UI( 1, 0x9E, 0 ) ) return -0x7FFFFFFF - 1; - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig | 0x00800000)<<8; - absZ = sig>>shiftDist; - if ( exact && ((uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f32_to_i64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - uint_fast64_t sig64, extra; - struct uint64_extra sig64Extra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; -#ifdef SOFTFLOAT_FAST_INT64 - sig64 = (uint_fast64_t) sig<<40; - extra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig64, 0, shiftDist ); - sig64 = sig64Extra.v; - extra = sig64Extra.extra; - } - return softfloat_roundToI64( sign, sig64, extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = sig<<8; - extSig[indexWord( 3, 1 )] = 0; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c deleted file mode 100644 index 397ddf6d0..000000000 --- a/addins/SoftFloat-3e/source/f32_to_i64_r_minMag.c +++ /dev/null @@ -1,94 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f32_to_i64_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t sig64; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( shiftDist <= 0 ) { - if ( uiA == packToF32UI( 1, 0xBE, 0 ) ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<40; - absZ = sig64>>shiftDist; - shiftDist = 40 - shiftDist; - if ( exact && (shiftDist < 0) && (uint32_t) (sig<<(shiftDist & 31)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sign ? -absZ : absZ; - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui32.c b/addins/SoftFloat-3e/source/f32_to_ui32.c deleted file mode 100644 index cb47d9458..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui32.c +++ /dev/null @@ -1,84 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f32_to_ui32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - uint_fast64_t sig64; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0xFF) && sig ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<32; - shiftDist = 0xAA - exp; - if ( 0 < shiftDist ) sig64 = softfloat_shiftRightJam64( sig64, shiftDist ); - return softfloat_roundToUI32( sign, sig64, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c deleted file mode 100644 index cdeb75f9f..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f32_to_ui32_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x9E - exp; - if ( 32 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig | 0x00800000)<<8; - z = sig>>shiftDist; - if ( exact && (z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f32_to_ui64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - bool sign; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - uint_fast64_t sig64, extra; - struct uint64_extra sig64Extra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF32UI( uiA ); - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( shiftDist < 0 ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= 0x00800000; -#ifdef SOFTFLOAT_FAST_INT64 - sig64 = (uint_fast64_t) sig<<40; - extra = 0; - if ( shiftDist ) { - sig64Extra = softfloat_shiftRightJam64Extra( sig64, 0, shiftDist ); - sig64 = sig64Extra.v; - extra = sig64Extra.extra; - } - return softfloat_roundToUI64( sign, sig64, extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 2 )] = sig<<8; - extSig[indexWord( 3, 1 )] = 0; - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist ) softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c deleted file mode 100644 index c0fe54f6e..000000000 --- a/addins/SoftFloat-3e/source/f32_to_ui64_r_minMag.c +++ /dev/null @@ -1,90 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f32_to_ui64_r_minMag( float32_t a, bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast32_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t sig64, z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF32UI( uiA ); - sig = fracF32UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0xBE - exp; - if ( 64 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF32UI( uiA ); - if ( sign || (shiftDist < 0) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0xFF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= 0x00800000; - sig64 = (uint_fast64_t) sig<<40; - z = sig64>>shiftDist; - shiftDist = 40 - shiftDist; - if ( exact && (shiftDist < 0) && (uint32_t) (sig<<(shiftDist & 31)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - -} - diff --git a/addins/SoftFloat-3e/source/f64_add.c b/addins/SoftFloat-3e/source/f64_add.c deleted file mode 100644 index 42f840dc5..000000000 --- a/addins/SoftFloat-3e/source/f64_add.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_add( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float64_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_addMagsF64( uiA, uiB, signA ); - } else { - return softfloat_subMagsF64( uiA, uiB, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_addMagsF64 : softfloat_subMagsF64; - return (*magsFuncPtr)( uiA, uiB, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f64_div.c b/addins/SoftFloat-3e/source/f64_div.c deleted file mode 100644 index 9c967bb74..000000000 --- a/addins/SoftFloat-3e/source/f64_div.c +++ /dev/null @@ -1,172 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_div( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t recip32, sig32Z, doubleTerm; - uint_fast64_t rem; - uint32_t q; - uint_fast64_t sigZ; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA ) goto propagateNaN; - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - goto invalid; - } - goto infinity; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - goto zero; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) { - if ( ! (expA | sigA) ) goto invalid; - softfloat_raiseFlags( softfloat_flag_infinite ); - goto infinity; - } - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA - expB + 0x3FE; - sigA |= UINT64_C( 0x0010000000000000 ); - sigB |= UINT64_C( 0x0010000000000000 ); - if ( sigA < sigB ) { - --expZ; - sigA <<= 11; - } else { - sigA <<= 10; - } - sigB <<= 11; - recip32 = softfloat_approxRecip32_1( sigB>>32 ) - 2; - sig32Z = ((uint32_t) (sigA>>32) * (uint_fast64_t) recip32)>>32; - doubleTerm = sig32Z<<1; - rem = - ((sigA - (uint_fast64_t) doubleTerm * (uint32_t) (sigB>>32))<<28) - - (uint_fast64_t) doubleTerm * ((uint32_t) sigB>>4); - q = (((uint32_t) (rem>>32) * (uint_fast64_t) recip32)>>32) + 4; - sigZ = ((uint_fast64_t) sig32Z<<32) + ((uint_fast64_t) q<<4); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (sigZ & 0x1FF) < 4<<4 ) { - q &= ~7; - sigZ &= ~(uint_fast64_t) 0x7F; - doubleTerm = q<<1; - rem = - ((rem - (uint_fast64_t) doubleTerm * (uint32_t) (sigB>>32))<<28) - - (uint_fast64_t) doubleTerm * ((uint32_t) sigB>>4); - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - sigZ -= 1<<7; - } else { - if ( rem ) sigZ |= 1; - } - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infinity: - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF64UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_eq.c b/addins/SoftFloat-3e/source/f64_eq.c deleted file mode 100644 index 360200379..000000000 --- a/addins/SoftFloat-3e/source/f64_eq.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_eq( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - return (uiA == uiB) || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )); - -} - diff --git a/addins/SoftFloat-3e/source/f64_eq_signaling.c b/addins/SoftFloat-3e/source/f64_eq_signaling.c deleted file mode 100644 index 5daa17937..000000000 --- a/addins/SoftFloat-3e/source/f64_eq_signaling.c +++ /dev/null @@ -1,61 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_eq_signaling( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - return (uiA == uiB) || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )); - -} - diff --git a/addins/SoftFloat-3e/source/f64_isSignalingNaN.c b/addins/SoftFloat-3e/source/f64_isSignalingNaN.c deleted file mode 100644 index e5d38321e..000000000 --- a/addins/SoftFloat-3e/source/f64_isSignalingNaN.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_isSignalingNaN( float64_t a ) -{ - union ui64_f64 uA; - - uA.f = a; - return softfloat_isSigNaNF64UI( uA.ui ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_le.c b/addins/SoftFloat-3e/source/f64_le.c deleted file mode 100644 index 0b43d0467..000000000 --- a/addins/SoftFloat-3e/source/f64_le.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_le( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_le_quiet.c b/addins/SoftFloat-3e/source/f64_le_quiet.c deleted file mode 100644 index 832eee7a7..000000000 --- a/addins/SoftFloat-3e/source/f64_le_quiet.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_le_quiet( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA || ! ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA == uiB) || (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_lt.c b/addins/SoftFloat-3e/source/f64_lt.c deleted file mode 100644 index 49ee05be0..000000000 --- a/addins/SoftFloat-3e/source/f64_lt.c +++ /dev/null @@ -1,67 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -bool f64_lt( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA && ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_lt_quiet.c b/addins/SoftFloat-3e/source/f64_lt_quiet.c deleted file mode 100644 index d64088054..000000000 --- a/addins/SoftFloat-3e/source/f64_lt_quiet.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -bool f64_lt_quiet( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signA, signB; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - if ( isNaNF64UI( uiA ) || isNaNF64UI( uiB ) ) { - if ( - softfloat_isSigNaNF64UI( uiA ) || softfloat_isSigNaNF64UI( uiB ) - ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - } - return false; - } - signA = signF64UI( uiA ); - signB = signF64UI( uiB ); - return - (signA != signB) - ? signA && ((uiA | uiB) & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - : (uiA != uiB) && (signA ^ (uiA < uiB)); - -} - diff --git a/addins/SoftFloat-3e/source/f64_mul.c b/addins/SoftFloat-3e/source/f64_mul.c deleted file mode 100644 index 222e91dce..000000000 --- a/addins/SoftFloat-3e/source/f64_mul.c +++ /dev/null @@ -1,150 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_mul( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signZ; - uint_fast64_t magBits; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint128 sig128Z; -#else - uint32_t sig128Z[4]; -#endif - uint_fast64_t sigZ, uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signZ = signA ^ signB; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN; - magBits = expB | sigB; - goto infArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - magBits = expA | sigA; - goto infArg; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zero; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FF; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<11; -#ifdef SOFTFLOAT_FAST_INT64 - sig128Z = softfloat_mul64To128( sigA, sigB ); - sigZ = sig128Z.v64 | (sig128Z.v0 != 0); -#else - softfloat_mul64To128M( sigA, sigB, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 | sig128Z[indexWord( 4, 2 )]; - if ( sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] ) sigZ |= 1; -#endif - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infArg: - if ( ! magBits ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - } else { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - } - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zero: - uiZ = packToF64UI( signZ, 0, 0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_mulAdd.c b/addins/SoftFloat-3e/source/f64_mulAdd.c deleted file mode 100644 index fea3d968b..000000000 --- a/addins/SoftFloat-3e/source/f64_mulAdd.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - union ui64_f64 uB; - uint_fast64_t uiB; - union ui64_f64 uC; - uint_fast64_t uiC; - - uA.f = a; - uiA = uA.ui; - uB.f = b; - uiB = uB.ui; - uC.f = c; - uiC = uC.ui; - return softfloat_mulAddF64( uiA, uiB, uiC, 0 ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_rem.c b/addins/SoftFloat-3e/source/f64_rem.c deleted file mode 100644 index ffce679aa..000000000 --- a/addins/SoftFloat-3e/source/f64_rem.c +++ /dev/null @@ -1,189 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_rem( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - union ui64_f64 uB; - uint_fast64_t uiB; - int_fast16_t expB; - uint_fast64_t sigB; - struct exp16_sig64 normExpSig; - uint64_t rem; - int_fast16_t expDiff; - uint32_t q, recip32; - uint_fast64_t q64; - uint64_t altRem, meanRem; - bool signRem; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN; - goto invalid; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA < expB - 1 ) return a; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expB ) { - if ( ! sigB ) goto invalid; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - rem = sigA | UINT64_C( 0x0010000000000000 ); - sigB |= UINT64_C( 0x0010000000000000 ); - expDiff = expA - expB; - if ( expDiff < 1 ) { - if ( expDiff < -1 ) return a; - sigB <<= 9; - if ( expDiff ) { - rem <<= 8; - q = 0; - } else { - rem <<= 9; - q = (sigB <= rem); - if ( q ) rem -= sigB; - } - } else { - recip32 = softfloat_approxRecip32_1( sigB>>21 ); - /*-------------------------------------------------------------------- - | Changing the shift of `rem' here requires also changing the initial - | subtraction from `expDiff'. - *--------------------------------------------------------------------*/ - rem <<= 9; - expDiff -= 30; - /*-------------------------------------------------------------------- - | The scale of `sigB' affects how many bits are obtained during each - | cycle of the loop. Currently this is 29 bits per loop iteration, - | the maximum possible. - *--------------------------------------------------------------------*/ - sigB <<= 9; - for (;;) { - q64 = (uint32_t) (rem>>32) * (uint_fast64_t) recip32; - if ( expDiff < 0 ) break; - q = (q64 + 0x80000000)>>32; -#ifdef SOFTFLOAT_FAST_INT64 - rem <<= 29; -#else - rem = (uint_fast64_t) (uint32_t) (rem>>3)<<32; -#endif - rem -= q * (uint64_t) sigB; - if ( rem & UINT64_C( 0x8000000000000000 ) ) rem += sigB; - expDiff -= 29; - } - /*-------------------------------------------------------------------- - | (`expDiff' cannot be less than -29 here.) - *--------------------------------------------------------------------*/ - q = (uint32_t) (q64>>32)>>(~expDiff & 31); - rem = (rem<<(expDiff + 30)) - q * (uint64_t) sigB; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - altRem = rem + sigB; - goto selectRem; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - do { - altRem = rem; - ++q; - rem -= sigB; - } while ( ! (rem & UINT64_C( 0x8000000000000000 )) ); - selectRem: - meanRem = rem + altRem; - if ( - (meanRem & UINT64_C( 0x8000000000000000 )) || (! meanRem && (q & 1)) - ) { - rem = altRem; - } - signRem = signA; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - signRem = ! signRem; - rem = -rem; - } - return softfloat_normRoundPackToF64( signRem, expB, rem ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto uiZ; - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_roundToInt.c b/addins/SoftFloat-3e/source/f64_roundToInt.c deleted file mode 100644 index 54e7b0542..000000000 --- a/addins/SoftFloat-3e/source/f64_roundToInt.c +++ /dev/null @@ -1,120 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t uiZ, lastBitMask, roundBitsMask; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp <= 0x3FE ) { - if ( !(uiA & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) return a; - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - uiZ = uiA & packToF64UI( 1, 0, 0 ); - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( !fracF64UI( uiA ) ) break; - case softfloat_round_near_maxMag: - if ( exp == 0x3FE ) uiZ |= packToF64UI( 0, 0x3FF, 0 ); - break; - case softfloat_round_min: - if ( uiZ ) uiZ = packToF64UI( 1, 0x3FF, 0 ); - break; - case softfloat_round_max: - if ( !uiZ ) uiZ = packToF64UI( 0, 0x3FF, 0 ); - break; -#ifdef SOFTFLOAT_ROUND_ODD - case softfloat_round_odd: - uiZ |= packToF64UI( 0, 0x3FF, 0 ); - break; -#endif - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x433 <= exp ) { - if ( (exp == 0x7FF) && fracF64UI( uiA ) ) { - uiZ = softfloat_propagateNaNF64UI( uiA, 0 ); - goto uiZ; - } - return a; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ = uiA; - lastBitMask = (uint_fast64_t) 1<<(0x433 - exp); - roundBitsMask = lastBitMask - 1; - if ( roundingMode == softfloat_round_near_maxMag ) { - uiZ += lastBitMask>>1; - } else if ( roundingMode == softfloat_round_near_even ) { - uiZ += lastBitMask>>1; - if ( !(uiZ & roundBitsMask) ) uiZ &= ~lastBitMask; - } else if ( - roundingMode - == (signF64UI( uiZ ) ? softfloat_round_min : softfloat_round_max) - ) { - uiZ += roundBitsMask; - } - uiZ &= ~roundBitsMask; - if ( uiZ != uiA ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) uiZ |= lastBitMask; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_sqrt.c b/addins/SoftFloat-3e/source/f64_sqrt.c deleted file mode 100644 index f9f226b69..000000000 --- a/addins/SoftFloat-3e/source/f64_sqrt.c +++ /dev/null @@ -1,133 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t f64_sqrt( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - int_fast16_t expA; - uint_fast64_t sigA, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t sig32A, recipSqrt32, sig32Z; - uint_fast64_t rem; - uint32_t q; - uint_fast64_t sigZ, shiftedSigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA ) { - uiZ = softfloat_propagateNaNF64UI( uiA, 0 ); - goto uiZ; - } - if ( ! signA ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signA ) { - if ( ! (expA | sigA) ) return a; - goto invalid; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) return a; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - /*------------------------------------------------------------------------ - | (`sig32Z' is guaranteed to be a lower bound on the square root of - | `sig32A', which makes `sig32Z' also a lower bound on the square root of - | `sigA'.) - *------------------------------------------------------------------------*/ - expZ = ((expA - 0x3FF)>>1) + 0x3FE; - expA &= 1; - sigA |= UINT64_C( 0x0010000000000000 ); - sig32A = sigA>>21; - recipSqrt32 = softfloat_approxRecipSqrt32_1( expA, sig32A ); - sig32Z = ((uint_fast64_t) sig32A * recipSqrt32)>>32; - if ( expA ) { - sigA <<= 8; - sig32Z >>= 1; - } else { - sigA <<= 9; - } - rem = sigA - (uint_fast64_t) sig32Z * sig32Z; - q = ((uint32_t) (rem>>2) * (uint_fast64_t) recipSqrt32)>>32; - sigZ = ((uint_fast64_t) sig32Z<<32 | 1<<5) + ((uint_fast64_t) q<<3); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (sigZ & 0x1FF) < 0x22 ) { - sigZ &= ~(uint_fast64_t) 0x3F; - shiftedSigZ = sigZ>>6; - rem = (sigA<<52) - shiftedSigZ * shiftedSigZ; - if ( rem & UINT64_C( 0x8000000000000000 ) ) { - --sigZ; - } else { - if ( rem ) sigZ |= 1; - } - } - return softfloat_roundPackToF64( 0, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_sub.c b/addins/SoftFloat-3e/source/f64_sub.c deleted file mode 100644 index b5ccb882b..000000000 --- a/addins/SoftFloat-3e/source/f64_sub.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t f64_sub( float64_t a, float64_t b ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool signA; - union ui64_f64 uB; - uint_fast64_t uiB; - bool signB; -#if ! defined INLINE_LEVEL || (INLINE_LEVEL < 2) - float64_t (*magsFuncPtr)( uint_fast64_t, uint_fast64_t, bool ); -#endif - - uA.f = a; - uiA = uA.ui; - signA = signF64UI( uiA ); - uB.f = b; - uiB = uB.ui; - signB = signF64UI( uiB ); -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) - if ( signA == signB ) { - return softfloat_subMagsF64( uiA, uiB, signA ); - } else { - return softfloat_addMagsF64( uiA, uiB, signA ); - } -#else - magsFuncPtr = - (signA == signB) ? softfloat_subMagsF64 : softfloat_addMagsF64; - return (*magsFuncPtr)( uiA, uiB, signA ); -#endif - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_extF80.c b/addins/SoftFloat-3e/source/f64_to_extF80.c deleted file mode 100644 index 2799d9b07..000000000 --- a/addins/SoftFloat-3e/source/f64_to_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t f64_to_extF80( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - struct exp16_sig64 normExpSig; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToExtF80UI( &commonNaN ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - } else { - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3C00 ); - uiZ0 = (frac | UINT64_C( 0x0010000000000000 ))<<11; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_extF80M.c b/addins/SoftFloat-3e/source/f64_to_extF80M.c deleted file mode 100644 index a2e67e46f..000000000 --- a/addins/SoftFloat-3e/source/f64_to_extF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = f64_to_extF80( a ); - -} - -#else - -void f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - union ui64_f64 uA; - uint64_t uiA; - bool sign; - int_fast16_t exp; - uint64_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ64; - uint64_t uiZ0; - struct exp16_sig64 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zSPtr = (struct extFloat80M *) zPtr; - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToExtF80M( &commonNaN, zSPtr ); - return; - } - uiZ64 = packToExtF80UI64( sign, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ64 = packToExtF80UI64( sign, 0 ); - uiZ0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ64 = packToExtF80UI64( sign, exp + 0x3C00 ); - uiZ0 = UINT64_C( 0x8000000000000000 ) | frac<<11; - uiZ: - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f64_to_f128.c b/addins/SoftFloat-3e/source/f64_to_f128.c deleted file mode 100644 index 60af3b0be..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f128.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t f64_to_f128( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - struct uint128 uiZ; - struct exp16_sig64 normExpSig; - struct uint128 frac128; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF128UI( &commonNaN ); - } else { - uiZ.v64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ.v0 = 0; - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ.v64 = packToF128UI64( sign, 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac128 = softfloat_shortShiftLeft128( 0, frac, 60 ); - uiZ.v64 = packToF128UI64( sign, exp + 0x3C00, frac128.v64 ); - uiZ.v0 = frac128.v0; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_f128M.c b/addins/SoftFloat-3e/source/f64_to_f128M.c deleted file mode 100644 index fbc451537..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f128M.c +++ /dev/null @@ -1,117 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - - *zPtr = f64_to_f128( a ); - -} - -#else - -void f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - union ui64_f64 uA; - uint64_t uiA; - bool sign; - int_fast16_t exp; - uint64_t frac; - struct commonNaN commonNaN; - uint32_t uiZ96; - struct exp16_sig64 normExpSig; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr = (uint32_t *) zPtr; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 0 )] = 0; - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - softfloat_commonNaNToF128M( &commonNaN, zWPtr ); - return; - } - uiZ96 = packToF128UI96( sign, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! exp ) { - if ( ! frac ) { - uiZ96 = packToF128UI96( sign, 0, 0 ); - goto uiZ; - } - normExpSig = softfloat_normSubnormalF64Sig( frac ); - exp = normExpSig.exp - 1; - frac = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zWPtr[indexWord( 4, 1 )] = (uint32_t) frac<<28; - frac >>= 4; - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp + 0x3C00, frac>>32 ); - zWPtr[indexWord( 4, 2 )] = frac; - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiZ: - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/f64_to_f16.c b/addins/SoftFloat-3e/source/f64_to_f16.c deleted file mode 100644 index 121e3062a..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f16.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t f64_to_f16( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - uint_fast16_t uiZ, frac16; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF16UI( &commonNaN ); - } else { - uiZ = packToF16UI( sign, 0x1F, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac16 = softfloat_shortShiftRightJam64( frac, 38 ); - if ( ! (exp | frac16) ) { - uiZ = packToF16UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF16( sign, exp - 0x3F1, frac16 | 0x4000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_f32.c b/addins/SoftFloat-3e/source/f64_to_f32.c deleted file mode 100644 index a18106556..000000000 --- a/addins/SoftFloat-3e/source/f64_to_f32.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t f64_to_f32( float64_t a ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t frac; - struct commonNaN commonNaN; - uint_fast32_t uiZ, frac32; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - frac = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp == 0x7FF ) { - if ( frac ) { - softfloat_f64UIToCommonNaN( uiA, &commonNaN ); - uiZ = softfloat_commonNaNToF32UI( &commonNaN ); - } else { - uiZ = packToF32UI( sign, 0xFF, 0 ); - } - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - frac32 = softfloat_shortShiftRightJam64( frac, 22 ); - if ( ! (exp | frac32) ) { - uiZ = packToF32UI( sign, 0, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - return softfloat_roundPackToF32( sign, exp - 0x381, frac32 | 0x40000000 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i32.c b/addins/SoftFloat-3e/source/f64_to_i32.c deleted file mode 100644 index 8d9785b0b..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i32.c +++ /dev/null @@ -1,82 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (i32_fromNaN != i32_fromPosOverflow) || (i32_fromNaN != i32_fromNegOverflow) - if ( (exp == 0x7FF) && sig ) { -#if (i32_fromNaN == i32_fromPosOverflow) - sign = 0; -#elif (i32_fromNaN == i32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return i32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x427 - exp; - if ( 0 < shiftDist ) sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c deleted file mode 100644 index 8b7a91f1c..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i32_r_minMag.c +++ /dev/null @@ -1,96 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t f64_to_i32_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - int_fast32_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( shiftDist < 22 ) { - if ( - sign && (exp == 0x41E) && (sig < UINT64_C( 0x0000000000200000 )) - ) { - if ( exact && sig ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return -0x7FFFFFFF - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? i32_fromNaN - : sign ? i32_fromNegOverflow : i32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig>>shiftDist; - if ( exact && ((uint_fast64_t) (uint_fast32_t) absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f64_to_i64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint64_extra sigExtra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x433 - exp; -#ifdef SOFTFLOAT_FAST_INT64 - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sigExtra.v = sig<<-shiftDist; - sigExtra.extra = 0; - } else { - sigExtra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - } - return - softfloat_roundToI64( - sign, sigExtra.v, sigExtra.extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sig <<= -shiftDist; - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - } else { - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - } - return softfloat_roundMToI64( sign, extSig, roundingMode, exact ); -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && fracF64UI( uiA ) ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c deleted file mode 100644 index 56c6a1010..000000000 --- a/addins/SoftFloat-3e/source/f64_to_i64_r_minMag.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t f64_to_i64_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - int_fast64_t absZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( shiftDist <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( shiftDist < -10 ) { - if ( uiA == packToF64UI( 1, 0x43E, 0 ) ) { - return -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? i64_fromNaN - : sign ? i64_fromNegOverflow : i64_fromPosOverflow; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig<<-shiftDist; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - absZ = sig>>shiftDist; - if ( exact && (absZ< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f64_to_ui32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#if (ui32_fromNaN != ui32_fromPosOverflow) || (ui32_fromNaN != ui32_fromNegOverflow) - if ( (exp == 0x7FF) && sig ) { -#if (ui32_fromNaN == ui32_fromPosOverflow) - sign = 0; -#elif (ui32_fromNaN == ui32_fromNegOverflow) - sign = 1; -#else - softfloat_raiseFlags( softfloat_flag_invalid ); - return ui32_fromNaN; -#endif - } -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x427 - exp; - if ( 0 < shiftDist ) sig = softfloat_shiftRightJam64( sig, shiftDist ); - return softfloat_roundToUI32( sign, sig, roundingMode, exact ); - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c deleted file mode 100644 index 6e3d14e8f..000000000 --- a/addins/SoftFloat-3e/source/f64_to_ui32_r_minMag.c +++ /dev/null @@ -1,88 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t f64_to_ui32_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( sign || (shiftDist < 21) ) { - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? ui32_fromNaN - : sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig |= UINT64_C( 0x0010000000000000 ); - z = sig>>shiftDist; - if ( exact && ((uint_fast64_t) z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f64_to_ui64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - bool sign; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; -#ifdef SOFTFLOAT_FAST_INT64 - struct uint64_extra sigExtra; -#else - uint32_t extSig[3]; -#endif - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - sign = signF64UI( uiA ); - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( exp ) sig |= UINT64_C( 0x0010000000000000 ); - shiftDist = 0x433 - exp; -#ifdef SOFTFLOAT_FAST_INT64 - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sigExtra.v = sig<<-shiftDist; - sigExtra.extra = 0; - } else { - sigExtra = softfloat_shiftRightJam64Extra( sig, 0, shiftDist ); - } - return - softfloat_roundToUI64( - sign, sigExtra.v, sigExtra.extra, roundingMode, exact ); -#else - extSig[indexWord( 3, 0 )] = 0; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - sig <<= -shiftDist; - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - } else { - extSig[indexWord( 3, 2 )] = sig>>32; - extSig[indexWord( 3, 1 )] = sig; - softfloat_shiftRightJam96M( extSig, shiftDist, extSig ); - } - return softfloat_roundMToUI64( sign, extSig, roundingMode, exact ); -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && fracF64UI( uiA ) ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c b/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c deleted file mode 100644 index 87eb0d05c..000000000 --- a/addins/SoftFloat-3e/source/f64_to_ui64_r_minMag.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t f64_to_ui64_r_minMag( float64_t a, bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig; - int_fast16_t shiftDist; - bool sign; - uint_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uA.f = a; - uiA = uA.ui; - exp = expF64UI( uiA ); - sig = fracF64UI( uiA ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 0x433 - exp; - if ( 53 <= shiftDist ) { - if ( exact && (exp | sig) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sign = signF64UI( uiA ); - if ( sign ) goto invalid; - if ( shiftDist <= 0 ) { - if ( shiftDist < -11 ) goto invalid; - z = (sig | UINT64_C( 0x0010000000000000 ))<<-shiftDist; - } else { - sig |= UINT64_C( 0x0010000000000000 ); - z = sig>>shiftDist; - if ( exact && (uint64_t) (sig<<(-shiftDist & 63)) ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; - } - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return - (exp == 0x7FF) && sig ? ui64_fromNaN - : sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_extF80.c b/addins/SoftFloat-3e/source/i32_to_extF80.c deleted file mode 100644 index 8036fa9f1..000000000 --- a/addins/SoftFloat-3e/source/i32_to_extF80.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t i32_to_extF80( int32_t a ) -{ - uint_fast16_t uiZ64; - uint_fast32_t absA; - bool sign; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - absA = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ); - uiZ64 = packToExtF80UI64( sign, 0x401E - shiftDist ); - absA <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = (uint_fast64_t) absA<<32; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_extF80M.c b/addins/SoftFloat-3e/source/i32_to_extF80M.c deleted file mode 100644 index 6d5431c1c..000000000 --- a/addins/SoftFloat-3e/source/i32_to_extF80M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = i32_to_extF80( a ); - -} - -#else - -void i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - bool sign; - uint32_t absA; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint32_t) a : (uint32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ); - uiZ64 = packToExtF80UI64( sign, 0x401E - shiftDist ); - sigZ = (uint64_t) (absA<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i32_to_f128.c b/addins/SoftFloat-3e/source/i32_to_f128.c deleted file mode 100644 index a7d55cba4..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f128.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t i32_to_f128( int32_t a ) -{ - uint_fast64_t uiZ64; - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui128_f128 uZ; - - uiZ64 = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 17; - uiZ64 = - packToF128UI64( - sign, 0x402E - shiftDist, (uint_fast64_t) absA< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - - *zPtr = i32_to_f128( a ); - -} - -#else - -void i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - uint32_t uiZ96, uiZ64; - bool sign; - uint32_t absA; - int_fast8_t shiftDist; - uint64_t normAbsA; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint32_t) a : (uint32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 17; - normAbsA = (uint64_t) absA<>32 ); - uiZ64 = normAbsA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i32_to_f16.c b/addins/SoftFloat-3e/source/i32_to_f16.c deleted file mode 100644 index d3117248a..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f16.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t i32_to_f16( int32_t a ) -{ - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) - 21; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - sign, 0x18 - shiftDist, (uint_fast16_t) absA<>(-shiftDist) - | ((uint32_t) (absA<<(shiftDist & 31)) != 0) - : (uint_fast16_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t i32_to_f32( int32_t a ) -{ - bool sign; - union ui32_f32 uZ; - uint_fast32_t absA; - - sign = (a < 0); - if ( ! (a & 0x7FFFFFFF) ) { - uZ.ui = sign ? packToF32UI( 1, 0x9E, 0 ) : 0; - return uZ.f; - } - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - return softfloat_normRoundPackToF32( sign, 0x9C, absA ); - -} - diff --git a/addins/SoftFloat-3e/source/i32_to_f64.c b/addins/SoftFloat-3e/source/i32_to_f64.c deleted file mode 100644 index 24feda542..000000000 --- a/addins/SoftFloat-3e/source/i32_to_f64.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t i32_to_f64( int32_t a ) -{ - uint_fast64_t uiZ; - bool sign; - uint_fast32_t absA; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - if ( ! a ) { - uiZ = 0; - } else { - sign = (a < 0); - absA = sign ? -(uint_fast32_t) a : (uint_fast32_t) a; - shiftDist = softfloat_countLeadingZeros32( absA ) + 21; - uiZ = - packToF64UI( - sign, 0x432 - shiftDist, (uint_fast64_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t i64_to_extF80( int64_t a ) -{ - uint_fast16_t uiZ64; - uint_fast64_t absA; - bool sign; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - absA = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ); - uiZ64 = packToExtF80UI64( sign, 0x403E - shiftDist ); - absA <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = absA; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i64_to_extF80M.c b/addins/SoftFloat-3e/source/i64_to_extF80M.c deleted file mode 100644 index 4838dde6d..000000000 --- a/addins/SoftFloat-3e/source/i64_to_extF80M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = i64_to_extF80( a ); - -} - -#else - -void i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - bool sign; - uint64_t absA; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint64_t) a : (uint64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ); - uiZ64 = packToExtF80UI64( sign, 0x403E - shiftDist ); - sigZ = absA<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i64_to_f128.c b/addins/SoftFloat-3e/source/i64_to_f128.c deleted file mode 100644 index fcb017939..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f128.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t i64_to_f128( int64_t a ) -{ - uint_fast64_t uiZ64, uiZ0; - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - struct uint128 zSig; - union ui128_f128 uZ; - - if ( ! a ) { - uiZ64 = 0; - uiZ0 = 0; - } else { - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) + 49; - if ( 64 <= shiftDist ) { - zSig.v64 = absA<<(shiftDist - 64); - zSig.v0 = 0; - } else { - zSig = softfloat_shortShiftLeft128( 0, absA, shiftDist ); - } - uiZ64 = packToF128UI64( sign, 0x406E - shiftDist, zSig.v64 ); - uiZ0 = zSig.v0; - } - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/i64_to_f128M.c b/addins/SoftFloat-3e/source/i64_to_f128M.c deleted file mode 100644 index 0a04eb8d0..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f128M.c +++ /dev/null @@ -1,92 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - - *zPtr = i64_to_f128( a ); - -} - -#else - -void i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr; - uint32_t uiZ96, uiZ64; - bool sign; - uint64_t absA; - uint_fast8_t shiftDist; - uint32_t *ptr; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - if ( a ) { - sign = (a < 0); - absA = sign ? -(uint64_t) a : (uint64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) + 17; - if ( shiftDist < 32 ) { - ptr = zWPtr + indexMultiwordHi( 4, 3 ); - ptr[indexWord( 3, 2 )] = 0; - ptr[indexWord( 3, 1 )] = absA>>32; - ptr[indexWord( 3, 0 )] = absA; - softfloat_shortShiftLeft96M( ptr, shiftDist, ptr ); - ptr[indexWordHi( 3 )] = - packToF128UI96( - sign, 0x404E - shiftDist, ptr[indexWordHi( 3 )] ); - return; - } - absA <<= shiftDist - 32; - uiZ96 = packToF128UI96( sign, 0x404E - shiftDist, absA>>32 ); - uiZ64 = absA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/i64_to_f16.c b/addins/SoftFloat-3e/source/i64_to_f16.c deleted file mode 100644 index cef7b6133..000000000 --- a/addins/SoftFloat-3e/source/i64_to_f16.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t i64_to_f16( int64_t a ) -{ - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) - 53; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - sign, 0x18 - shiftDist, (uint_fast16_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t i64_to_f32( int64_t a ) -{ - bool sign; - uint_fast64_t absA; - int_fast8_t shiftDist; - union ui32_f32 u; - uint_fast32_t sig; - - sign = (a < 0); - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - shiftDist = softfloat_countLeadingZeros64( absA ) - 40; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF32UI( - sign, 0x95 - shiftDist, (uint_fast32_t) absA< -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t i64_to_f64( int64_t a ) -{ - bool sign; - union ui64_f64 uZ; - uint_fast64_t absA; - - sign = (a < 0); - if ( ! (a & UINT64_C( 0x7FFFFFFFFFFFFFFF )) ) { - uZ.ui = sign ? packToF64UI( 1, 0x43E, 0 ) : 0; - return uZ.f; - } - absA = sign ? -(uint_fast64_t) a : (uint_fast64_t) a; - return softfloat_normRoundPackToF64( sign, 0x43C, absA ); - -} - diff --git a/addins/SoftFloat-3e/source/include/internals.h b/addins/SoftFloat-3e/source/include/internals.h deleted file mode 100644 index 020b3402f..000000000 --- a/addins/SoftFloat-3e/source/include/internals.h +++ /dev/null @@ -1,278 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef internals_h -#define internals_h 1 - -#include -#include -#include "primitives.h" -#include "softfloat_types.h" - -union ui16_f16 { uint16_t ui; float16_t f; }; -union ui32_f32 { uint32_t ui; float32_t f; }; -union ui64_f64 { uint64_t ui; float64_t f; }; - -#ifdef SOFTFLOAT_FAST_INT64 -union extF80M_extF80 { struct extFloat80M fM; extFloat80_t f; }; -union ui128_f128 { struct uint128 ui; float128_t f; }; -#endif - -enum { - softfloat_mulAdd_subC = 1, - softfloat_mulAdd_subProd = 2 -}; - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -uint_fast32_t softfloat_roundToUI32( bool, uint_fast64_t, uint_fast8_t, bool ); - -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast64_t - softfloat_roundToUI64( - bool, uint_fast64_t, uint_fast64_t, uint_fast8_t, bool ); -#else -uint_fast64_t softfloat_roundMToUI64( bool, uint32_t *, uint_fast8_t, bool ); -#endif - -int_fast32_t softfloat_roundToI32( bool, uint_fast64_t, uint_fast8_t, bool ); - -#ifdef SOFTFLOAT_FAST_INT64 -int_fast64_t - softfloat_roundToI64( - bool, uint_fast64_t, uint_fast64_t, uint_fast8_t, bool ); -#else -int_fast64_t softfloat_roundMToI64( bool, uint32_t *, uint_fast8_t, bool ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF16UI( a ) ((bool) ((uint16_t) (a)>>15)) -#define expF16UI( a ) ((int_fast8_t) ((a)>>10) & 0x1F) -#define fracF16UI( a ) ((a) & 0x03FF) -#define packToF16UI( sign, exp, sig ) (((uint16_t) (sign)<<15) + ((uint16_t) (exp)<<10) + (sig)) - -#define isNaNF16UI( a ) (((~(a) & 0x7C00) == 0) && ((a) & 0x03FF)) - -struct exp8_sig16 { int_fast8_t exp; uint_fast16_t sig; }; -struct exp8_sig16 softfloat_normSubnormalF16Sig( uint_fast16_t ); - -float16_t softfloat_roundPackToF16( bool, int_fast16_t, uint_fast16_t ); -float16_t softfloat_normRoundPackToF16( bool, int_fast16_t, uint_fast16_t ); - -float16_t softfloat_addMagsF16( uint_fast16_t, uint_fast16_t ); -float16_t softfloat_subMagsF16( uint_fast16_t, uint_fast16_t ); -float16_t - softfloat_mulAddF16( - uint_fast16_t, uint_fast16_t, uint_fast16_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF32UI( a ) ((bool) ((uint32_t) (a)>>31)) -#define expF32UI( a ) ((int_fast16_t) ((a)>>23) & 0xFF) -#define fracF32UI( a ) ((a) & 0x007FFFFF) -#define packToF32UI( sign, exp, sig ) (((uint32_t) (sign)<<31) + ((uint32_t) (exp)<<23) + (sig)) - -#define isNaNF32UI( a ) (((~(a) & 0x7F800000) == 0) && ((a) & 0x007FFFFF)) - -struct exp16_sig32 { int_fast16_t exp; uint_fast32_t sig; }; -struct exp16_sig32 softfloat_normSubnormalF32Sig( uint_fast32_t ); - -float32_t softfloat_roundPackToF32( bool, int_fast16_t, uint_fast32_t ); -float32_t softfloat_normRoundPackToF32( bool, int_fast16_t, uint_fast32_t ); - -float32_t softfloat_addMagsF32( uint_fast32_t, uint_fast32_t ); -float32_t softfloat_subMagsF32( uint_fast32_t, uint_fast32_t ); -float32_t - softfloat_mulAddF32( - uint_fast32_t, uint_fast32_t, uint_fast32_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF64UI( a ) ((bool) ((uint64_t) (a)>>63)) -#define expF64UI( a ) ((int_fast16_t) ((a)>>52) & 0x7FF) -#define fracF64UI( a ) ((a) & UINT64_C( 0x000FFFFFFFFFFFFF )) -#define packToF64UI( sign, exp, sig ) ((uint64_t) (((uint_fast64_t) (sign)<<63) + ((uint_fast64_t) (exp)<<52) + (sig))) - -#define isNaNF64UI( a ) (((~(a) & UINT64_C( 0x7FF0000000000000 )) == 0) && ((a) & UINT64_C( 0x000FFFFFFFFFFFFF ))) - -struct exp16_sig64 { int_fast16_t exp; uint_fast64_t sig; }; -struct exp16_sig64 softfloat_normSubnormalF64Sig( uint_fast64_t ); - -float64_t softfloat_roundPackToF64( bool, int_fast16_t, uint_fast64_t ); -float64_t softfloat_normRoundPackToF64( bool, int_fast16_t, uint_fast64_t ); - -float64_t softfloat_addMagsF64( uint_fast64_t, uint_fast64_t, bool ); -float64_t softfloat_subMagsF64( uint_fast64_t, uint_fast64_t, bool ); -float64_t - softfloat_mulAddF64( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signExtF80UI64( a64 ) ((bool) ((uint16_t) (a64)>>15)) -#define expExtF80UI64( a64 ) ((a64) & 0x7FFF) -#define packToExtF80UI64( sign, exp ) ((uint_fast16_t) (sign)<<15 | (exp)) - -#define isNaNExtF80UI( a64, a0 ) ((((a64) & 0x7FFF) == 0x7FFF) && ((a0) & UINT64_C( 0x7FFFFFFFFFFFFFFF ))) - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -struct exp32_sig64 { int_fast32_t exp; uint64_t sig; }; -struct exp32_sig64 softfloat_normSubnormalExtF80Sig( uint_fast64_t ); - -extFloat80_t - softfloat_roundPackToExtF80( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); -extFloat80_t - softfloat_normRoundPackToExtF80( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast8_t ); - -extFloat80_t - softfloat_addMagsExtF80( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); -extFloat80_t - softfloat_subMagsExtF80( - uint_fast16_t, uint_fast64_t, uint_fast16_t, uint_fast64_t, bool ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF128UI64( a64 ) ((bool) ((uint64_t) (a64)>>63)) -#define expF128UI64( a64 ) ((int_fast32_t) ((a64)>>48) & 0x7FFF) -#define fracF128UI64( a64 ) ((a64) & UINT64_C( 0x0000FFFFFFFFFFFF )) -#define packToF128UI64( sign, exp, sig64 ) (((uint_fast64_t) (sign)<<63) + ((uint_fast64_t) (exp)<<48) + (sig64)) - -#define isNaNF128UI( a64, a0 ) (((~(a64) & UINT64_C( 0x7FFF000000000000 )) == 0) && (a0 || ((a64) & UINT64_C( 0x0000FFFFFFFFFFFF )))) - -struct exp32_sig128 { int_fast32_t exp; struct uint128 sig; }; -struct exp32_sig128 - softfloat_normSubnormalF128Sig( uint_fast64_t, uint_fast64_t ); - -float128_t - softfloat_roundPackToF128( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t, uint_fast64_t ); -float128_t - softfloat_normRoundPackToF128( - bool, int_fast32_t, uint_fast64_t, uint_fast64_t ); - -float128_t - softfloat_addMagsF128( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -float128_t - softfloat_subMagsF128( - uint_fast64_t, uint_fast64_t, uint_fast64_t, uint_fast64_t, bool ); -float128_t - softfloat_mulAddF128( - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast64_t, - uint_fast8_t - ); - -#else - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -bool - softfloat_tryPropagateNaNExtF80M( - const struct extFloat80M *, - const struct extFloat80M *, - struct extFloat80M * - ); -void softfloat_invalidExtF80M( struct extFloat80M * ); - -int softfloat_normExtF80SigM( uint64_t * ); - -void - softfloat_roundPackMToExtF80M( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); -void - softfloat_normRoundPackMToExtF80M( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); - -void - softfloat_addExtF80M( - const struct extFloat80M *, - const struct extFloat80M *, - struct extFloat80M *, - bool - ); - -int - softfloat_compareNonnormExtF80M( - const struct extFloat80M *, const struct extFloat80M * ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define signF128UI96( a96 ) ((bool) ((uint32_t) (a96)>>31)) -#define expF128UI96( a96 ) ((int32_t) ((a96)>>16) & 0x7FFF) -#define fracF128UI96( a96 ) ((a96) & 0x0000FFFF) -#define packToF128UI96( sign, exp, sig96 ) (((uint32_t) (sign)<<31) + ((uint32_t) (exp)<<16) + (sig96)) - -bool softfloat_isNaNF128M( const uint32_t * ); - -bool - softfloat_tryPropagateNaNF128M( - const uint32_t *, const uint32_t *, uint32_t * ); -void softfloat_invalidF128M( uint32_t * ); - -int softfloat_shiftNormSigF128M( const uint32_t *, uint_fast8_t, uint32_t * ); - -void softfloat_roundPackMToF128M( bool, int32_t, uint32_t *, uint32_t * ); -void softfloat_normRoundPackMToF128M( bool, int32_t, uint32_t *, uint32_t * ); - -void - softfloat_addF128M( const uint32_t *, const uint32_t *, uint32_t *, bool ); -void - softfloat_mulAddF128M( - const uint32_t *, - const uint32_t *, - const uint32_t *, - uint32_t *, - uint_fast8_t - ); - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/opts-GCC.h b/addins/SoftFloat-3e/source/include/opts-GCC.h deleted file mode 100644 index 18c1523e9..000000000 --- a/addins/SoftFloat-3e/source/include/opts-GCC.h +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2017 The Regents of the University of California. All rights -reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef opts_GCC_h -#define opts_GCC_h 1 - -#ifdef INLINE - -#include -#include "primitiveTypes.h" - -#ifdef SOFTFLOAT_BUILTIN_CLZ - -INLINE uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) - { return a ? __builtin_clz( a ) - 16 : 16; } -#define softfloat_countLeadingZeros16 softfloat_countLeadingZeros16 - -INLINE uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) - { return a ? __builtin_clz( a ) : 32; } -#define softfloat_countLeadingZeros32 softfloat_countLeadingZeros32 - -INLINE uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ) - { return a ? __builtin_clzll( a ) : 64; } -#define softfloat_countLeadingZeros64 softfloat_countLeadingZeros64 - -#endif - -#ifdef SOFTFLOAT_INTRINSIC_INT128 - -INLINE struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = (unsigned __int128) a * ((uint_fast64_t) b<<32); - return uZ.s; -} -#define softfloat_mul64ByShifted32To128 softfloat_mul64ByShifted32To128 - -INLINE struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = (unsigned __int128) a * b; - return uZ.s; -} -#define softfloat_mul64To128 softfloat_mul64To128 - -INLINE -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - union { unsigned __int128 ui; struct uint128 s; } uZ; - uZ.ui = ((unsigned __int128) a64<<64 | a0) * b; - return uZ.s; -} -#define softfloat_mul128By32 softfloat_mul128By32 - -INLINE -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ) -{ - unsigned __int128 z0, mid1, mid, z128; - z0 = (unsigned __int128) a0 * b0; - mid1 = (unsigned __int128) a64 * b0; - mid = mid1 + (unsigned __int128) a0 * b64; - z128 = (unsigned __int128) a64 * b64; - z128 += (unsigned __int128) (mid < mid1)<<64 | mid>>64; - mid <<= 64; - z0 += mid; - z128 += (z0 < mid); - zPtr[indexWord( 4, 0 )] = z0; - zPtr[indexWord( 4, 1 )] = z0>>64; - zPtr[indexWord( 4, 2 )] = z128; - zPtr[indexWord( 4, 3 )] = z128>>64; -} -#define softfloat_mul128To256M softfloat_mul128To256M - -#endif - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/primitiveTypes.h b/addins/SoftFloat-3e/source/include/primitiveTypes.h deleted file mode 100644 index a4a6dd11c..000000000 --- a/addins/SoftFloat-3e/source/include/primitiveTypes.h +++ /dev/null @@ -1,85 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef primitiveTypes_h -#define primitiveTypes_h 1 - -#include - -#ifdef SOFTFLOAT_FAST_INT64 - -#ifdef LITTLEENDIAN -struct uint128 { uint64_t v0, v64; }; -struct uint64_extra { uint64_t extra, v; }; -struct uint128_extra { uint64_t extra; struct uint128 v; }; -#else -struct uint128 { uint64_t v64, v0; }; -struct uint64_extra { uint64_t v, extra; }; -struct uint128_extra { struct uint128 v; uint64_t extra; }; -#endif - -#endif - -/*---------------------------------------------------------------------------- -| These macros are used to isolate the differences in word order between big- -| endian and little-endian platforms. -*----------------------------------------------------------------------------*/ -#ifdef LITTLEENDIAN -#define wordIncr 1 -#define indexWord( total, n ) (n) -#define indexWordHi( total ) ((total) - 1) -#define indexWordLo( total ) 0 -#define indexMultiword( total, m, n ) (n) -#define indexMultiwordHi( total, n ) ((total) - (n)) -#define indexMultiwordLo( total, n ) 0 -#define indexMultiwordHiBut( total, n ) (n) -#define indexMultiwordLoBut( total, n ) 0 -#define INIT_UINTM4( v3, v2, v1, v0 ) { v0, v1, v2, v3 } -#else -#define wordIncr -1 -#define indexWord( total, n ) ((total) - 1 - (n)) -#define indexWordHi( total ) 0 -#define indexWordLo( total ) ((total) - 1) -#define indexMultiword( total, m, n ) ((total) - 1 - (m)) -#define indexMultiwordHi( total, n ) 0 -#define indexMultiwordLo( total, n ) ((total) - (n)) -#define indexMultiwordHiBut( total, n ) 0 -#define indexMultiwordLoBut( total, n ) (n) -#define INIT_UINTM4( v3, v2, v1, v0 ) { v3, v2, v1, v0 } -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/primitives.h b/addins/SoftFloat-3e/source/include/primitives.h deleted file mode 100644 index 863ab45b5..000000000 --- a/addins/SoftFloat-3e/source/include/primitives.h +++ /dev/null @@ -1,1160 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef primitives_h -#define primitives_h 1 - -#include -#include -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam64 -/*---------------------------------------------------------------------------- -| Shifts 'a' right by the number of bits given in 'dist', which must be in -| the range 1 to 63. If any nonzero bits are shifted off, they are "jammed" -| into the least-significant bit of the shifted value by setting the least- -| significant bit to 1. This shifted-and-jammed value is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -uint64_t softfloat_shortShiftRightJam64( uint64_t a, uint_fast8_t dist ) - { return a>>dist | ((a & (((uint_fast64_t) 1<>dist | ((uint32_t) (a<<(-dist & 31)) != 0) : (a != 0); -} -#else -uint32_t softfloat_shiftRightJam32( uint32_t a, uint_fast16_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam64 -/*---------------------------------------------------------------------------- -| Shifts 'a' right by the number of bits given in 'dist', which must not -| be zero. If any nonzero bits are shifted off, they are "jammed" into the -| least-significant bit of the shifted value by setting the least-significant -| bit to 1. This shifted-and-jammed value is returned. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than 64, the result will be either 0 or 1, depending on whether 'a' -| is zero or nonzero. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ) -{ - return - (dist < 63) ? a>>dist | ((uint64_t) (a<<(-dist & 63)) != 0) : (a != 0); -} -#else -uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ); -#endif -#endif - -/*---------------------------------------------------------------------------- -| A constant table that translates an 8-bit unsigned integer (the array index) -| into the number of leading 0 bits before the most-significant 1 of that -| integer. For integer zero (index 0), the corresponding table element is 8. -*----------------------------------------------------------------------------*/ -extern const uint_least8_t softfloat_countLeadingZeros8[256]; - -#ifndef softfloat_countLeadingZeros16 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 16 is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) -{ - uint_fast8_t count = 8; - if ( 0x100 <= a ) { - count = 0; - a >>= 8; - } - count += softfloat_countLeadingZeros8[a]; - return count; -} -#else -uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ); -#endif -#endif - -#ifndef softfloat_countLeadingZeros32 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 32 is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) -{ - uint_fast8_t count = 0; - if ( a < 0x10000 ) { - count = 16; - a <<= 16; - } - if ( a < 0x1000000 ) { - count += 8; - a <<= 8; - } - count += softfloat_countLeadingZeros8[a>>24]; - return count; -} -#else -uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ); -#endif -#endif - -#ifndef softfloat_countLeadingZeros64 -/*---------------------------------------------------------------------------- -| Returns the number of leading 0 bits before the most-significant 1 bit of -| 'a'. If 'a' is zero, 64 is returned. -*----------------------------------------------------------------------------*/ -uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ); -#endif - -extern const uint16_t softfloat_approxRecip_1k0s[16]; -extern const uint16_t softfloat_approxRecip_1k1s[16]; - -#ifndef softfloat_approxRecip32_1 -/*---------------------------------------------------------------------------- -| Returns an approximation to the reciprocal of the number represented by 'a', -| where 'a' is interpreted as an unsigned fixed-point number with one integer -| bit and 31 fraction bits. The 'a' input must be "normalized", meaning that -| its most-significant bit (bit 31) must be 1. Thus, if A is the value of -| the fixed-point interpretation of 'a', then 1 <= A < 2. The returned value -| is interpreted as a pure unsigned fraction, having no integer bits and 32 -| fraction bits. The approximation returned is never greater than the true -| reciprocal 1/A, and it differs from the true reciprocal by at most 2.006 ulp -| (units in the last place). -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_DIV64TO32 -#define softfloat_approxRecip32_1( a ) ((uint32_t) (UINT64_C( 0x7FFFFFFFFFFFFFFF ) / (uint32_t) (a))) -#else -uint32_t softfloat_approxRecip32_1( uint32_t a ); -#endif -#endif - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[16]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[16]; - -#ifndef softfloat_approxRecipSqrt32_1 -/*---------------------------------------------------------------------------- -| Returns an approximation to the reciprocal of the square root of the number -| represented by 'a', where 'a' is interpreted as an unsigned fixed-point -| number either with one integer bit and 31 fraction bits or with two integer -| bits and 30 fraction bits. The format of 'a' is determined by 'oddExpA', -| which must be either 0 or 1. If 'oddExpA' is 1, 'a' is interpreted as -| having one integer bit, and if 'oddExpA' is 0, 'a' is interpreted as having -| two integer bits. The 'a' input must be "normalized", meaning that its -| most-significant bit (bit 31) must be 1. Thus, if A is the value of the -| fixed-point interpretation of 'a', it follows that 1 <= A < 2 when 'oddExpA' -| is 1, and 2 <= A < 4 when 'oddExpA' is 0. -| The returned value is interpreted as a pure unsigned fraction, having -| no integer bits and 32 fraction bits. The approximation returned is never -| greater than the true reciprocal 1/sqrt(A), and it differs from the true -| reciprocal by at most 2.06 ulp (units in the last place). The approximation -| returned is also always within the range 0.5 to 1; thus, the most- -| significant bit of the result is always set. -*----------------------------------------------------------------------------*/ -uint32_t softfloat_approxRecipSqrt32_1( unsigned int oddExpA, uint32_t a ); -#endif - -#ifdef SOFTFLOAT_FAST_INT64 - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is -| defined. -*----------------------------------------------------------------------------*/ - -#ifndef softfloat_eq128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is equal to the 128-bit unsigned integer formed by concatenating -| 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (1 <= INLINE_LEVEL) -INLINE -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 == b64) && (a0 == b0); } -#else -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_le128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is less than or equal to the 128-bit unsigned integer formed by -| concatenating 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 < b64) || ((a64 == b64) && (a0 <= b0)); } -#else -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_lt128 -/*---------------------------------------------------------------------------- -| Returns true if the 128-bit unsigned integer formed by concatenating 'a64' -| and 'a0' is less than the 128-bit unsigned integer formed by concatenating -| 'b64' and 'b0'. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) - { return (a64 < b64) || ((a64 == b64) && (a0 < b0)); } -#else -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_shortShiftLeft128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' left by the -| number of bits given in 'dist', which must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_shortShiftLeft128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - z.v64 = a64<>(-dist & 63); - z.v0 = a0<>dist; - z.v0 = a64<<(-dist & 63) | a0>>dist; - return z; -} -#else -struct uint128 - softfloat_shortShiftRight128( uint64_t a64, uint64_t a0, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam64Extra -/*---------------------------------------------------------------------------- -| This function is the same as 'softfloat_shiftRightJam64Extra' (below), -| except that 'dist' must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ) -{ - struct uint64_extra z; - z.v = a>>dist; - z.extra = a<<(-dist & 63) | (extra != 0); - return z; -} -#else -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' right by the -| number of bits given in 'dist', which must be in the range 1 to 63. If any -| nonzero bits are shifted off, they are "jammed" into the least-significant -| bit of the shifted value by setting the least-significant bit to 1. This -| shifted-and-jammed value is returned. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - uint_fast8_t negDist = -dist; - struct uint128 z; - z.v64 = a64>>dist; - z.v0 = - a64<<(negDist & 63) | a0>>dist - | ((uint64_t) (a0<<(negDist & 63)) != 0); - return z; -} -#else -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shortShiftRightJam128Extra -/*---------------------------------------------------------------------------- -| This function is the same as 'softfloat_shiftRightJam128Extra' (below), -| except that 'dist' must be in the range 1 to 63. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ) -{ - uint_fast8_t negDist = -dist; - struct uint128_extra z; - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(negDist & 63) | a0>>dist; - z.extra = a0<<(negDist & 63) | (extra != 0); - return z; -} -#else -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam64Extra -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a' and 'extra' right by 64 -| _plus_ the number of bits given in 'dist', which must not be zero. This -| shifted value is at most 64 nonzero bits and is returned in the 'v' field -| of the 'struct uint64_extra' result. The 64-bit 'extra' field of the result -| contains a value formed as follows from the bits that were shifted off: The -| _last_ bit shifted off is the most-significant bit of the 'extra' field, and -| the other 63 bits of the 'extra' field are all zero if and only if _all_but_ -| _the_last_ bits shifted off were all zero. -| (This function makes more sense if 'a' and 'extra' are considered to form -| an unsigned fixed-point number with binary point between 'a' and 'extra'. -| This fixed-point value is shifted right by the number of bits given in -| 'dist', and the integer part of this shifted value is returned in the 'v' -| field of the result. The fractional part of the shifted value is modified -| as described above and returned in the 'extra' field of the result.) -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (4 <= INLINE_LEVEL) -INLINE -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ) -{ - struct uint64_extra z; - if ( dist < 64 ) { - z.v = a>>dist; - z.extra = a<<(-dist & 63); - } else { - z.v = 0; - z.extra = (dist == 64) ? a : (a != 0); - } - z.extra |= (extra != 0); - return z; -} -#else -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ); -#endif -#endif - -#ifndef softfloat_shiftRightJam128 -/*---------------------------------------------------------------------------- -| Shifts the 128 bits formed by concatenating 'a64' and 'a0' right by the -| number of bits given in 'dist', which must not be zero. If any nonzero bits -| are shifted off, they are "jammed" into the least-significant bit of the -| shifted value by setting the least-significant bit to 1. This shifted-and- -| jammed value is returned. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than 128, the result will be either 0 or 1, depending on whether the -| original 128 bits are all zeros. -*----------------------------------------------------------------------------*/ -struct uint128 - softfloat_shiftRightJam128( uint64_t a64, uint64_t a0, uint_fast32_t dist ); -#endif - -#ifndef softfloat_shiftRightJam128Extra -/*---------------------------------------------------------------------------- -| Shifts the 192 bits formed by concatenating 'a64', 'a0', and 'extra' right -| by 64 _plus_ the number of bits given in 'dist', which must not be zero. -| This shifted value is at most 128 nonzero bits and is returned in the 'v' -| field of the 'struct uint128_extra' result. The 64-bit 'extra' field of the -| result contains a value formed as follows from the bits that were shifted -| off: The _last_ bit shifted off is the most-significant bit of the 'extra' -| field, and the other 63 bits of the 'extra' field are all zero if and only -| if _all_but_the_last_ bits shifted off were all zero. -| (This function makes more sense if 'a64', 'a0', and 'extra' are considered -| to form an unsigned fixed-point number with binary point between 'a0' and -| 'extra'. This fixed-point value is shifted right by the number of bits -| given in 'dist', and the integer part of this shifted value is returned -| in the 'v' field of the result. The fractional part of the shifted value -| is modified as described above and returned in the 'extra' field of the -| result.) -*----------------------------------------------------------------------------*/ -struct uint128_extra - softfloat_shiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast32_t dist ); -#endif - -#ifndef softfloat_shiftRightJam256M -/*---------------------------------------------------------------------------- -| Shifts the 256-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', which must not be zero. If any nonzero bits are -| shifted off, they are "jammed" into the least-significant bit of the shifted -| value by setting the least-significant bit to 1. This shifted-and-jammed -| value is stored at the location pointed to by 'zPtr'. Each of 'aPtr' and -| 'zPtr' points to an array of four 64-bit elements that concatenate in the -| platform's normal endian order to form a 256-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' -| is greater than 256, the stored result will be either 0 or 1, depending on -| whether the original 256 bits are all zeros. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightJam256M( - const uint64_t *aPtr, uint_fast32_t dist, uint64_t *zPtr ); -#endif - -#ifndef softfloat_add128 -/*---------------------------------------------------------------------------- -| Returns the sum of the 128-bit integer formed by concatenating 'a64' and -| 'a0' and the 128-bit integer formed by concatenating 'b64' and 'b0'. The -| addition is modulo 2^128, so any carry out is lost. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - z.v0 = a0 + b0; - z.v64 = a64 + b64 + (z.v0 < a0); - return z; -} -#else -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_add256M -/*---------------------------------------------------------------------------- -| Adds the two 256-bit integers pointed to by 'aPtr' and 'bPtr'. The addition -| is modulo 2^256, so any carry out is lost. The sum is stored at the -| location pointed to by 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to -| an array of four 64-bit elements that concatenate in the platform's normal -| endian order to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_add256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ); -#endif - -#ifndef softfloat_sub128 -/*---------------------------------------------------------------------------- -| Returns the difference of the 128-bit integer formed by concatenating 'a64' -| and 'a0' and the 128-bit integer formed by concatenating 'b64' and 'b0'. -| The subtraction is modulo 2^128, so any borrow out (carry out) is lost. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - z.v0 = a0 - b0; - z.v64 = a64 - b64; - z.v64 -= (a0 < b0); - return z; -} -#else -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ); -#endif -#endif - -#ifndef softfloat_sub256M -/*---------------------------------------------------------------------------- -| Subtracts the 256-bit integer pointed to by 'bPtr' from the 256-bit integer -| pointed to by 'aPtr'. The addition is modulo 2^256, so any borrow out -| (carry out) is lost. The difference is stored at the location pointed to -| by 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to an array of four -| 64-bit elements that concatenate in the platform's normal endian order to -| form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_sub256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ); -#endif - -#ifndef softfloat_mul64ByShifted32To128 -/*---------------------------------------------------------------------------- -| Returns the 128-bit product of 'a', 'b', and 2^32. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (3 <= INLINE_LEVEL) -INLINE struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - uint_fast64_t mid; - struct uint128 z; - mid = (uint_fast64_t) (uint32_t) a * b; - z.v0 = mid<<32; - z.v64 = (uint_fast64_t) (uint32_t) (a>>32) * b + (mid>>32); - return z; -} -#else -struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ); -#endif -#endif - -#ifndef softfloat_mul64To128 -/*---------------------------------------------------------------------------- -| Returns the 128-bit product of 'a' and 'b'. -*----------------------------------------------------------------------------*/ -struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ); -#endif - -#ifndef softfloat_mul128By32 -/*---------------------------------------------------------------------------- -| Returns the product of the 128-bit integer formed by concatenating 'a64' and -| 'a0', multiplied by 'b'. The multiplication is modulo 2^128; any overflow -| bits are discarded. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (4 <= INLINE_LEVEL) -INLINE -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - struct uint128 z; - uint_fast64_t mid; - uint_fast32_t carry; - z.v0 = a0 * b; - mid = (uint_fast64_t) (uint32_t) (a0>>32) * b; - carry = (uint32_t) ((uint_fast32_t) (z.v0>>32) - (uint_fast32_t) mid); - z.v64 = a64 * b + (uint_fast32_t) ((mid + carry)>>32); - return z; -} -#else -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ); -#endif -#endif - -#ifndef softfloat_mul128To256M -/*---------------------------------------------------------------------------- -| Multiplies the 128-bit unsigned integer formed by concatenating 'a64' and -| 'a0' by the 128-bit unsigned integer formed by concatenating 'b64' and -| 'b0'. The 256-bit product is stored at the location pointed to by 'zPtr'. -| Argument 'zPtr' points to an array of four 64-bit elements that concatenate -| in the platform's normal endian order to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ); -#endif - -#else - -/*---------------------------------------------------------------------------- -| The following functions are needed only when 'SOFTFLOAT_FAST_INT64' is not -| defined. -*----------------------------------------------------------------------------*/ - -#ifndef softfloat_compare96M -/*---------------------------------------------------------------------------- -| Compares the two 96-bit unsigned integers pointed to by 'aPtr' and 'bPtr'. -| Returns -1 if the first integer (A) is less than the second (B); returns 0 -| if the two integers are equal; and returns +1 if the first integer (A) -| is greater than the second (B). (The result is thus the signum of A - B.) -| Each of 'aPtr' and 'bPtr' points to an array of three 32-bit elements that -| concatenate in the platform's normal endian order to form a 96-bit integer. -*----------------------------------------------------------------------------*/ -int_fast8_t softfloat_compare96M( const uint32_t *aPtr, const uint32_t *bPtr ); -#endif - -#ifndef softfloat_compare128M -/*---------------------------------------------------------------------------- -| Compares the two 128-bit unsigned integers pointed to by 'aPtr' and 'bPtr'. -| Returns -1 if the first integer (A) is less than the second (B); returns 0 -| if the two integers are equal; and returns +1 if the first integer (A) -| is greater than the second (B). (The result is thus the signum of A - B.) -| Each of 'aPtr' and 'bPtr' points to an array of four 32-bit elements that -| concatenate in the platform's normal endian order to form a 128-bit integer. -*----------------------------------------------------------------------------*/ -int_fast8_t - softfloat_compare128M( const uint32_t *aPtr, const uint32_t *bPtr ); -#endif - -#ifndef softfloat_shortShiftLeft64To96M -/*---------------------------------------------------------------------------- -| Extends 'a' to 96 bits and shifts the value left by the number of bits given -| in 'dist', which must be in the range 1 to 31. The result is stored at the -| location pointed to by 'zPtr'. Argument 'zPtr' points to an array of three -| 32-bit elements that concatenate in the platform's normal endian order to -| form a 96-bit integer. -*----------------------------------------------------------------------------*/ -#if defined INLINE_LEVEL && (2 <= INLINE_LEVEL) -INLINE -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ) -{ - zPtr[indexWord( 3, 0 )] = (uint32_t) a<>= 32 - dist; - zPtr[indexWord( 3, 2 )] = a>>32; - zPtr[indexWord( 3, 1 )] = a; -} -#else -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ); -#endif -#endif - -#ifndef softfloat_shortShiftLeftM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' left by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. Any nonzero bits shifted off are lost. The -| shifted N-bit result is stored at the location pointed to by 'zPtr'. Each -| of 'aPtr' and 'zPtr' points to a 'size_words'-long array of 32-bit elements -| that concatenate in the platform's normal endian order to form an N-bit -| integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shortShiftLeft96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft96M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftLeft128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft128M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftLeft160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftLeftM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftLeft160M( aPtr, dist, zPtr ) softfloat_shortShiftLeftM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeftM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' left by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. Any nonzero bits shifted off are lost. The shifted -| N-bit result is stored at the location pointed to by 'zPtr'. Each of 'aPtr' -| and 'zPtr' points to a 'size_words'-long array of 32-bit elements that -| concatenate in the platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than N, the stored result will be 0. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftLeft96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft96M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeft128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft128M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftLeft160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftLeftM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftLeft160M( aPtr, dist, zPtr ) softfloat_shiftLeftM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRightM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. Any nonzero bits shifted off are lost. The -| shifted N-bit result is stored at the location pointed to by 'zPtr'. Each -| of 'aPtr' and 'zPtr' points to a 'size_words'-long array of 32-bit elements -| that concatenate in the platform's normal endian order to form an N-bit -| integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shortShiftRight128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRight128M( aPtr, dist, zPtr ) softfloat_shortShiftRightM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRight160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRight160M( aPtr, dist, zPtr ) softfloat_shortShiftRightM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shortShiftRightJamM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must be in the range 1 to 31. If any nonzero bits are shifted off, they are -| "jammed" into the least-significant bit of the shifted value by setting the -| least-significant bit to 1. This shifted-and-jammed N-bit result is stored -| at the location pointed to by 'zPtr'. Each of 'aPtr' and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_shortShiftRightJamM( - uint_fast8_t, const uint32_t *, uint_fast8_t, uint32_t * ); -#endif - -#ifndef softfloat_shortShiftRightJam160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shortShiftRightJamM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shortShiftRightJam160M( aPtr, dist, zPtr ) softfloat_shortShiftRightJamM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. Any nonzero bits shifted off are lost. The shifted -| N-bit result is stored at the location pointed to by 'zPtr'. Each of 'aPtr' -| and 'zPtr' points to a 'size_words'-long array of 32-bit elements that -| concatenate in the platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' is -| greater than N, the stored result will be 0. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftRight96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRight96M( aPtr, dist, zPtr ) softfloat_shiftRightM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJamM -/*---------------------------------------------------------------------------- -| Shifts the N-bit unsigned integer pointed to by 'aPtr' right by the number -| of bits given in 'dist', where N = 'size_words' * 32. The value of 'dist' -| must not be zero. If any nonzero bits are shifted off, they are "jammed" -| into the least-significant bit of the shifted value by setting the least- -| significant bit to 1. This shifted-and-jammed N-bit result is stored -| at the location pointed to by 'zPtr'. Each of 'aPtr' and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -| The value of 'dist' can be arbitrarily large. In particular, if 'dist' -| is greater than N, the stored result will be either 0 or 1, depending on -| whether the original N bits are all zeros. -*----------------------------------------------------------------------------*/ -void - softfloat_shiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_shiftRightJam96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam96M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 3, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJam128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam128M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 4, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_shiftRightJam160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_shiftRightJamM' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_shiftRightJam160M( aPtr, dist, zPtr ) softfloat_shiftRightJamM( 5, aPtr, dist, zPtr ) -#endif - -#ifndef softfloat_addM -/*---------------------------------------------------------------------------- -| Adds the two N-bit integers pointed to by 'aPtr' and 'bPtr', where N = -| 'size_words' * 32. The addition is modulo 2^N, so any carry out is lost. -| The N-bit sum is stored at the location pointed to by 'zPtr'. Each of -| 'aPtr', 'bPtr', and 'zPtr' points to a 'size_words'-long array of 32-bit -| elements that concatenate in the platform's normal endian order to form an -| N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_addM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_add96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_add96M( aPtr, bPtr, zPtr ) softfloat_addM( 3, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_add128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_add128M( aPtr, bPtr, zPtr ) softfloat_addM( 4, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_add160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_add160M( aPtr, bPtr, zPtr ) softfloat_addM( 5, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_addCarryM -/*---------------------------------------------------------------------------- -| Adds the two N-bit unsigned integers pointed to by 'aPtr' and 'bPtr', where -| N = 'size_words' * 32, plus 'carry', which must be either 0 or 1. The N-bit -| sum (modulo 2^N) is stored at the location pointed to by 'zPtr', and any -| carry out is returned as the result. Each of 'aPtr', 'bPtr', and 'zPtr' -| points to a 'size_words'-long array of 32-bit elements that concatenate in -| the platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -uint_fast8_t - softfloat_addCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_addComplCarryM -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addCarryM', except that -| the value of the unsigned integer pointed to by 'bPtr' is bit-wise completed -| before the addition. -*----------------------------------------------------------------------------*/ -uint_fast8_t - softfloat_addComplCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_addComplCarry96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_addComplCarryM' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_addComplCarry96M( aPtr, bPtr, carry, zPtr ) softfloat_addComplCarryM( 3, aPtr, bPtr, carry, zPtr ) -#endif - -#ifndef softfloat_negXM -/*---------------------------------------------------------------------------- -| Replaces the N-bit unsigned integer pointed to by 'zPtr' by the -| 2s-complement of itself, where N = 'size_words' * 32. Argument 'zPtr' -| points to a 'size_words'-long array of 32-bit elements that concatenate in -| the platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_negXM( uint_fast8_t size_words, uint32_t *zPtr ); -#endif - -#ifndef softfloat_negX96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_negX96M( zPtr ) softfloat_negXM( 3, zPtr ) -#endif - -#ifndef softfloat_negX128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_negX128M( zPtr ) softfloat_negXM( 4, zPtr ) -#endif - -#ifndef softfloat_negX160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_negX160M( zPtr ) softfloat_negXM( 5, zPtr ) -#endif - -#ifndef softfloat_negX256M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_negXM' with 'size_words' -| = 8 (N = 256). -*----------------------------------------------------------------------------*/ -#define softfloat_negX256M( zPtr ) softfloat_negXM( 8, zPtr ) -#endif - -#ifndef softfloat_sub1XM -/*---------------------------------------------------------------------------- -| Subtracts 1 from the N-bit integer pointed to by 'zPtr', where N = -| 'size_words' * 32. The subtraction is modulo 2^N, so any borrow out (carry -| out) is lost. Argument 'zPtr' points to a 'size_words'-long array of 32-bit -| elements that concatenate in the platform's normal endian order to form an -| N-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_sub1XM( uint_fast8_t size_words, uint32_t *zPtr ); -#endif - -#ifndef softfloat_sub1X96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_sub1XM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_sub1X96M( zPtr ) softfloat_sub1XM( 3, zPtr ) -#endif - -#ifndef softfloat_sub1X160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_sub1XM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_sub1X160M( zPtr ) softfloat_sub1XM( 5, zPtr ) -#endif - -#ifndef softfloat_subM -/*---------------------------------------------------------------------------- -| Subtracts the two N-bit integers pointed to by 'aPtr' and 'bPtr', where N = -| 'size_words' * 32. The subtraction is modulo 2^N, so any borrow out (carry -| out) is lost. The N-bit difference is stored at the location pointed to by -| 'zPtr'. Each of 'aPtr', 'bPtr', and 'zPtr' points to a 'size_words'-long -| array of 32-bit elements that concatenate in the platform's normal endian -| order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_subM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_sub96M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_sub96M( aPtr, bPtr, zPtr ) softfloat_subM( 3, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_sub128M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_sub128M( aPtr, bPtr, zPtr ) softfloat_subM( 4, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_sub160M -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_subM' with 'size_words' -| = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_sub160M( aPtr, bPtr, zPtr ) softfloat_subM( 5, aPtr, bPtr, zPtr ) -#endif - -#ifndef softfloat_mul64To128M -/*---------------------------------------------------------------------------- -| Multiplies 'a' and 'b' and stores the 128-bit product at the location -| pointed to by 'zPtr'. Argument 'zPtr' points to an array of four 32-bit -| elements that concatenate in the platform's normal endian order to form a -| 128-bit integer. -*----------------------------------------------------------------------------*/ -void softfloat_mul64To128M( uint64_t a, uint64_t b, uint32_t *zPtr ); -#endif - -#ifndef softfloat_mul128MTo256M -/*---------------------------------------------------------------------------- -| Multiplies the two 128-bit unsigned integers pointed to by 'aPtr' and -| 'bPtr', and stores the 256-bit product at the location pointed to by 'zPtr'. -| Each of 'aPtr' and 'bPtr' points to an array of four 32-bit elements that -| concatenate in the platform's normal endian order to form a 128-bit integer. -| Argument 'zPtr' points to an array of eight 32-bit elements that concatenate -| to form a 256-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_mul128MTo256M( - const uint32_t *aPtr, const uint32_t *bPtr, uint32_t *zPtr ); -#endif - -#ifndef softfloat_remStepMBy32 -/*---------------------------------------------------------------------------- -| Performs a "remainder reduction step" as follows: Arguments 'remPtr' and -| 'bPtr' both point to N-bit unsigned integers, where N = 'size_words' * 32. -| Defining R and B as the values of those integers, the expression (R<<'dist') -| - B * q is computed modulo 2^N, and the N-bit result is stored at the -| location pointed to by 'zPtr'. Each of 'remPtr', 'bPtr', and 'zPtr' points -| to a 'size_words'-long array of 32-bit elements that concatenate in the -| platform's normal endian order to form an N-bit integer. -*----------------------------------------------------------------------------*/ -void - softfloat_remStepMBy32( - uint_fast8_t size_words, - const uint32_t *remPtr, - uint_fast8_t dist, - const uint32_t *bPtr, - uint32_t q, - uint32_t *zPtr - ); -#endif - -#ifndef softfloat_remStep96MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 3 (N = 96). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep96MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 3, remPtr, dist, bPtr, q, zPtr ) -#endif - -#ifndef softfloat_remStep128MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 4 (N = 128). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep128MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 4, remPtr, dist, bPtr, q, zPtr ) -#endif - -#ifndef softfloat_remStep160MBy32 -/*---------------------------------------------------------------------------- -| This function or macro is the same as 'softfloat_remStepMBy32' with -| 'size_words' = 5 (N = 160). -*----------------------------------------------------------------------------*/ -#define softfloat_remStep160MBy32( remPtr, dist, bPtr, q, zPtr ) softfloat_remStepMBy32( 5, remPtr, dist, bPtr, q, zPtr ) -#endif - -#endif - -#endif - diff --git a/addins/SoftFloat-3e/source/include/softfloat.h b/addins/SoftFloat-3e/source/include/softfloat.h deleted file mode 100644 index b33374cd6..000000000 --- a/addins/SoftFloat-3e/source/include/softfloat.h +++ /dev/null @@ -1,372 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - - -/*============================================================================ -| Note: If SoftFloat is made available as a general library for programs to -| use, it is strongly recommended that a platform-specific version of this -| header, "softfloat.h", be created that folds in "softfloat_types.h" and that -| eliminates all dependencies on compile-time macros. -*============================================================================*/ - - -#ifndef softfloat_h -#define softfloat_h 1 - -#include -#include -#include "softfloat_types.h" - -#ifndef THREAD_LOCAL -#define THREAD_LOCAL -#endif - -/*---------------------------------------------------------------------------- -| Software floating-point underflow tininess-detection mode. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_detectTininess; -enum { - softfloat_tininess_beforeRounding = 0, - softfloat_tininess_afterRounding = 1 -}; - -/*---------------------------------------------------------------------------- -| Software floating-point rounding mode. (Mode "odd" is supported only if -| SoftFloat is compiled with macro 'SOFTFLOAT_ROUND_ODD' defined.) -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_roundingMode; -enum { - softfloat_round_near_even = 0, - softfloat_round_minMag = 1, - softfloat_round_min = 2, - softfloat_round_max = 3, - softfloat_round_near_maxMag = 4, - softfloat_round_odd = 6 -}; - -/*---------------------------------------------------------------------------- -| Software floating-point exception flags. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags; -enum { - softfloat_flag_inexact = 1, - softfloat_flag_underflow = 2, - softfloat_flag_overflow = 4, - softfloat_flag_infinite = 8, - softfloat_flag_invalid = 16 -}; - -/*---------------------------------------------------------------------------- -| Routine to raise any or all of the software floating-point exception flags. -*----------------------------------------------------------------------------*/ -void softfloat_raiseFlags( uint_fast8_t ); - -/*---------------------------------------------------------------------------- -| Integer-to-floating-point conversion routines. -*----------------------------------------------------------------------------*/ -float16_t ui32_to_f16( uint32_t ); -float32_t ui32_to_f32( uint32_t ); -float64_t ui32_to_f64( uint32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t ui32_to_extF80( uint32_t ); -float128_t ui32_to_f128( uint32_t ); -#endif -void ui32_to_extF80M( uint32_t, extFloat80_t * ); -void ui32_to_f128M( uint32_t, float128_t * ); -float16_t ui64_to_f16( uint64_t ); -float32_t ui64_to_f32( uint64_t ); -float64_t ui64_to_f64( uint64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t ui64_to_extF80( uint64_t ); -float128_t ui64_to_f128( uint64_t ); -#endif -void ui64_to_extF80M( uint64_t, extFloat80_t * ); -void ui64_to_f128M( uint64_t, float128_t * ); -float16_t i32_to_f16( int32_t ); -float32_t i32_to_f32( int32_t ); -float64_t i32_to_f64( int32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t i32_to_extF80( int32_t ); -float128_t i32_to_f128( int32_t ); -#endif -void i32_to_extF80M( int32_t, extFloat80_t * ); -void i32_to_f128M( int32_t, float128_t * ); -float16_t i64_to_f16( int64_t ); -float32_t i64_to_f32( int64_t ); -float64_t i64_to_f64( int64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t i64_to_extF80( int64_t ); -float128_t i64_to_f128( int64_t ); -#endif -void i64_to_extF80M( int64_t, extFloat80_t * ); -void i64_to_f128M( int64_t, float128_t * ); - -/*---------------------------------------------------------------------------- -| 16-bit (half-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f16_to_ui32( float16_t, uint_fast8_t, bool ); -uint_fast64_t f16_to_ui64( float16_t, uint_fast8_t, bool ); -int_fast32_t f16_to_i32( float16_t, uint_fast8_t, bool ); -int_fast64_t f16_to_i64( float16_t, uint_fast8_t, bool ); -uint_fast32_t f16_to_ui32_r_minMag( float16_t, bool ); -uint_fast64_t f16_to_ui64_r_minMag( float16_t, bool ); -int_fast32_t f16_to_i32_r_minMag( float16_t, bool ); -int_fast64_t f16_to_i64_r_minMag( float16_t, bool ); -float32_t f16_to_f32( float16_t ); -float64_t f16_to_f64( float16_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f16_to_extF80( float16_t ); -float128_t f16_to_f128( float16_t ); -#endif -void f16_to_extF80M( float16_t, extFloat80_t * ); -void f16_to_f128M( float16_t, float128_t * ); -float16_t f16_roundToInt( float16_t, uint_fast8_t, bool ); -float16_t f16_add( float16_t, float16_t ); -float16_t f16_sub( float16_t, float16_t ); -float16_t f16_mul( float16_t, float16_t ); -float16_t f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t f16_div( float16_t, float16_t ); -float16_t f16_rem( float16_t, float16_t ); -float16_t f16_sqrt( float16_t ); -bool f16_eq( float16_t, float16_t ); -bool f16_le( float16_t, float16_t ); -bool f16_lt( float16_t, float16_t ); -bool f16_eq_signaling( float16_t, float16_t ); -bool f16_le_quiet( float16_t, float16_t ); -bool f16_lt_quiet( float16_t, float16_t ); -bool f16_isSignalingNaN( float16_t ); - -/*---------------------------------------------------------------------------- -| 32-bit (single-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f32_to_ui32( float32_t, uint_fast8_t, bool ); -uint_fast64_t f32_to_ui64( float32_t, uint_fast8_t, bool ); -int_fast32_t f32_to_i32( float32_t, uint_fast8_t, bool ); -int_fast64_t f32_to_i64( float32_t, uint_fast8_t, bool ); -uint_fast32_t f32_to_ui32_r_minMag( float32_t, bool ); -uint_fast64_t f32_to_ui64_r_minMag( float32_t, bool ); -int_fast32_t f32_to_i32_r_minMag( float32_t, bool ); -int_fast64_t f32_to_i64_r_minMag( float32_t, bool ); -float16_t f32_to_f16( float32_t ); -float64_t f32_to_f64( float32_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f32_to_extF80( float32_t ); -float128_t f32_to_f128( float32_t ); -#endif -void f32_to_extF80M( float32_t, extFloat80_t * ); -void f32_to_f128M( float32_t, float128_t * ); -float32_t f32_roundToInt( float32_t, uint_fast8_t, bool ); -float32_t f32_add( float32_t, float32_t ); -float32_t f32_sub( float32_t, float32_t ); -float32_t f32_mul( float32_t, float32_t ); -float32_t f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t f32_div( float32_t, float32_t ); -float32_t f32_rem( float32_t, float32_t ); -float32_t f32_sqrt( float32_t ); -bool f32_eq( float32_t, float32_t ); -bool f32_le( float32_t, float32_t ); -bool f32_lt( float32_t, float32_t ); -bool f32_eq_signaling( float32_t, float32_t ); -bool f32_le_quiet( float32_t, float32_t ); -bool f32_lt_quiet( float32_t, float32_t ); -bool f32_isSignalingNaN( float32_t ); - -/*---------------------------------------------------------------------------- -| 64-bit (double-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -uint_fast32_t f64_to_ui32( float64_t, uint_fast8_t, bool ); -uint_fast64_t f64_to_ui64( float64_t, uint_fast8_t, bool ); -int_fast32_t f64_to_i32( float64_t, uint_fast8_t, bool ); -int_fast64_t f64_to_i64( float64_t, uint_fast8_t, bool ); -uint_fast32_t f64_to_ui32_r_minMag( float64_t, bool ); -uint_fast64_t f64_to_ui64_r_minMag( float64_t, bool ); -int_fast32_t f64_to_i32_r_minMag( float64_t, bool ); -int_fast64_t f64_to_i64_r_minMag( float64_t, bool ); -float16_t f64_to_f16( float64_t ); -float32_t f64_to_f32( float64_t ); -#ifdef SOFTFLOAT_FAST_INT64 -extFloat80_t f64_to_extF80( float64_t ); -float128_t f64_to_f128( float64_t ); -#endif -void f64_to_extF80M( float64_t, extFloat80_t * ); -void f64_to_f128M( float64_t, float128_t * ); -float64_t f64_roundToInt( float64_t, uint_fast8_t, bool ); -float64_t f64_add( float64_t, float64_t ); -float64_t f64_sub( float64_t, float64_t ); -float64_t f64_mul( float64_t, float64_t ); -float64_t f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t f64_div( float64_t, float64_t ); -float64_t f64_rem( float64_t, float64_t ); -float64_t f64_sqrt( float64_t ); -bool f64_eq( float64_t, float64_t ); -bool f64_le( float64_t, float64_t ); -bool f64_lt( float64_t, float64_t ); -bool f64_eq_signaling( float64_t, float64_t ); -bool f64_le_quiet( float64_t, float64_t ); -bool f64_lt_quiet( float64_t, float64_t ); -bool f64_isSignalingNaN( float64_t ); - -/*---------------------------------------------------------------------------- -| Rounding precision for 80-bit extended double-precision floating-point. -| Valid values are 32, 64, and 80. -*----------------------------------------------------------------------------*/ -extern THREAD_LOCAL uint_fast8_t extF80_roundingPrecision; - -/*---------------------------------------------------------------------------- -| 80-bit extended double-precision floating-point operations. -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast32_t extF80_to_ui32( extFloat80_t, uint_fast8_t, bool ); -uint_fast64_t extF80_to_ui64( extFloat80_t, uint_fast8_t, bool ); -int_fast32_t extF80_to_i32( extFloat80_t, uint_fast8_t, bool ); -int_fast64_t extF80_to_i64( extFloat80_t, uint_fast8_t, bool ); -uint_fast32_t extF80_to_ui32_r_minMag( extFloat80_t, bool ); -uint_fast64_t extF80_to_ui64_r_minMag( extFloat80_t, bool ); -int_fast32_t extF80_to_i32_r_minMag( extFloat80_t, bool ); -int_fast64_t extF80_to_i64_r_minMag( extFloat80_t, bool ); -float16_t extF80_to_f16( extFloat80_t ); -float32_t extF80_to_f32( extFloat80_t ); -float64_t extF80_to_f64( extFloat80_t ); -float128_t extF80_to_f128( extFloat80_t ); -extFloat80_t extF80_roundToInt( extFloat80_t, uint_fast8_t, bool ); -extFloat80_t extF80_add( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_sub( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_mul( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_div( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_rem( extFloat80_t, extFloat80_t ); -extFloat80_t extF80_sqrt( extFloat80_t ); -bool extF80_eq( extFloat80_t, extFloat80_t ); -bool extF80_le( extFloat80_t, extFloat80_t ); -bool extF80_lt( extFloat80_t, extFloat80_t ); -bool extF80_eq_signaling( extFloat80_t, extFloat80_t ); -bool extF80_le_quiet( extFloat80_t, extFloat80_t ); -bool extF80_lt_quiet( extFloat80_t, extFloat80_t ); -bool extF80_isSignalingNaN( extFloat80_t ); -#endif -uint_fast32_t extF80M_to_ui32( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast64_t extF80M_to_ui64( const extFloat80_t *, uint_fast8_t, bool ); -int_fast32_t extF80M_to_i32( const extFloat80_t *, uint_fast8_t, bool ); -int_fast64_t extF80M_to_i64( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast32_t extF80M_to_ui32_r_minMag( const extFloat80_t *, bool ); -uint_fast64_t extF80M_to_ui64_r_minMag( const extFloat80_t *, bool ); -int_fast32_t extF80M_to_i32_r_minMag( const extFloat80_t *, bool ); -int_fast64_t extF80M_to_i64_r_minMag( const extFloat80_t *, bool ); -float16_t extF80M_to_f16( const extFloat80_t * ); -float32_t extF80M_to_f32( const extFloat80_t * ); -float64_t extF80M_to_f64( const extFloat80_t * ); -void extF80M_to_f128M( const extFloat80_t *, float128_t * ); -void - extF80M_roundToInt( - const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ); -void extF80M_add( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_sub( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_mul( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_div( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_rem( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); -bool extF80M_isSignalingNaN( const extFloat80_t * ); - -/*---------------------------------------------------------------------------- -| 128-bit (quadruple-precision) floating-point operations. -*----------------------------------------------------------------------------*/ -#ifdef SOFTFLOAT_FAST_INT64 -uint_fast32_t f128_to_ui32( float128_t, uint_fast8_t, bool ); -uint_fast64_t f128_to_ui64( float128_t, uint_fast8_t, bool ); -int_fast32_t f128_to_i32( float128_t, uint_fast8_t, bool ); -int_fast64_t f128_to_i64( float128_t, uint_fast8_t, bool ); -uint_fast32_t f128_to_ui32_r_minMag( float128_t, bool ); -uint_fast64_t f128_to_ui64_r_minMag( float128_t, bool ); -int_fast32_t f128_to_i32_r_minMag( float128_t, bool ); -int_fast64_t f128_to_i64_r_minMag( float128_t, bool ); -float16_t f128_to_f16( float128_t ); -float32_t f128_to_f32( float128_t ); -float64_t f128_to_f64( float128_t ); -extFloat80_t f128_to_extF80( float128_t ); -float128_t f128_roundToInt( float128_t, uint_fast8_t, bool ); -float128_t f128_add( float128_t, float128_t ); -float128_t f128_sub( float128_t, float128_t ); -float128_t f128_mul( float128_t, float128_t ); -float128_t f128_mulAdd( float128_t, float128_t, float128_t ); -float128_t f128_div( float128_t, float128_t ); -float128_t f128_rem( float128_t, float128_t ); -float128_t f128_sqrt( float128_t ); -bool f128_eq( float128_t, float128_t ); -bool f128_le( float128_t, float128_t ); -bool f128_lt( float128_t, float128_t ); -bool f128_eq_signaling( float128_t, float128_t ); -bool f128_le_quiet( float128_t, float128_t ); -bool f128_lt_quiet( float128_t, float128_t ); -bool f128_isSignalingNaN( float128_t ); -#endif -uint_fast32_t f128M_to_ui32( const float128_t *, uint_fast8_t, bool ); -uint_fast64_t f128M_to_ui64( const float128_t *, uint_fast8_t, bool ); -int_fast32_t f128M_to_i32( const float128_t *, uint_fast8_t, bool ); -int_fast64_t f128M_to_i64( const float128_t *, uint_fast8_t, bool ); -uint_fast32_t f128M_to_ui32_r_minMag( const float128_t *, bool ); -uint_fast64_t f128M_to_ui64_r_minMag( const float128_t *, bool ); -int_fast32_t f128M_to_i32_r_minMag( const float128_t *, bool ); -int_fast64_t f128M_to_i64_r_minMag( const float128_t *, bool ); -float16_t f128M_to_f16( const float128_t * ); -float32_t f128M_to_f32( const float128_t * ); -float64_t f128M_to_f64( const float128_t * ); -void f128M_to_extF80M( const float128_t *, extFloat80_t * ); -void f128M_roundToInt( const float128_t *, uint_fast8_t, bool, float128_t * ); -void f128M_add( const float128_t *, const float128_t *, float128_t * ); -void f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void f128M_div( const float128_t *, const float128_t *, float128_t * ); -void f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void f128M_sqrt( const float128_t *, float128_t * ); -bool f128M_eq( const float128_t *, const float128_t * ); -bool f128M_le( const float128_t *, const float128_t * ); -bool f128M_lt( const float128_t *, const float128_t * ); -bool f128M_eq_signaling( const float128_t *, const float128_t * ); -bool f128M_le_quiet( const float128_t *, const float128_t * ); -bool f128M_lt_quiet( const float128_t *, const float128_t * ); -bool f128M_isSignalingNaN( const float128_t * ); - -#endif - diff --git a/addins/SoftFloat-3e/source/include/softfloat_types.h b/addins/SoftFloat-3e/source/include/softfloat_types.h deleted file mode 100644 index bc30e3144..000000000 --- a/addins/SoftFloat-3e/source/include/softfloat_types.h +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -This C header file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#ifndef softfloat_types_h -#define softfloat_types_h 1 - -#include - -/*---------------------------------------------------------------------------- -| Types used to pass 16-bit, 32-bit, 64-bit, and 128-bit floating-point -| arguments and results to/from functions. These types must be exactly -| 16 bits, 32 bits, 64 bits, and 128 bits in size, respectively. Where a -| platform has "native" support for IEEE-Standard floating-point formats, -| the types below may, if desired, be defined as aliases for the native types -| (typically 'float' and 'double', and possibly 'long double'). -*----------------------------------------------------------------------------*/ -typedef struct { uint16_t v; } float16_t; -typedef struct { uint32_t v; } float32_t; -typedef struct { uint64_t v; } float64_t; -typedef struct { uint64_t v[2]; } float128_t; - -/*---------------------------------------------------------------------------- -| The format of an 80-bit extended floating-point number in memory. This -| structure must contain a 16-bit field named 'signExp' and a 64-bit field -| named 'signif'. -*----------------------------------------------------------------------------*/ -#ifdef LITTLEENDIAN -struct extFloat80M { uint64_t signif; uint16_t signExp; }; -#else -struct extFloat80M { uint16_t signExp; uint64_t signif; }; -#endif - -/*---------------------------------------------------------------------------- -| The type used to pass 80-bit extended floating-point arguments and -| results to/from functions. This type must have size identical to -| 'struct extFloat80M'. Type 'extFloat80_t' can be defined as an alias for -| 'struct extFloat80M'. Alternatively, if a platform has "native" support -| for IEEE-Standard 80-bit extended floating-point, it may be possible, -| if desired, to define 'extFloat80_t' as an alias for the native type -| (presumably either 'long double' or a nonstandard compiler-intrinsic type). -| In that case, the 'signif' and 'signExp' fields of 'struct extFloat80M' -| must align exactly with the locations in memory of the sign, exponent, and -| significand of the native type. -*----------------------------------------------------------------------------*/ -typedef struct extFloat80M extFloat80_t; - -#endif - diff --git a/addins/SoftFloat-3e/source/s_add128.c b/addins/SoftFloat-3e/source/s_add128.c deleted file mode 100644 index 5a9d5082a..000000000 --- a/addins/SoftFloat-3e/source/s_add128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_add128 - -struct uint128 - softfloat_add128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - - z.v0 = a0 + b0; - z.v64 = a64 + b64 + (z.v0 < a0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_add256M.c b/addins/SoftFloat-3e/source/s_add256M.c deleted file mode 100644 index 4fb46a174..000000000 --- a/addins/SoftFloat-3e/source/s_add256M.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_add256M - -void - softfloat_add256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ) -{ - unsigned int index; - uint_fast8_t carry; - uint64_t wordA, wordZ; - - index = indexWordLo( 4 ); - carry = 0; - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( index == indexWordHi( 4 ) ) break; - if ( wordZ != wordA ) carry = (wordZ < wordA); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addCarryM.c b/addins/SoftFloat-3e/source/s_addCarryM.c deleted file mode 100644 index f0ccf6724..000000000 --- a/addins/SoftFloat-3e/source/s_addCarryM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addCarryM - -uint_fast8_t - softfloat_addCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( wordZ != wordA ) carry = (wordZ < wordA); - if ( index == lastIndex ) break; - index += wordIncr; - } - return carry; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addComplCarryM.c b/addins/SoftFloat-3e/source/s_addComplCarryM.c deleted file mode 100644 index e1584c669..000000000 --- a/addins/SoftFloat-3e/source/s_addComplCarryM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addComplCarryM - -uint_fast8_t - softfloat_addComplCarryM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint_fast8_t carry, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + ~bPtr[index] + carry; - zPtr[index] = wordZ; - if ( wordZ != wordA ) carry = (wordZ < wordA); - if ( index == lastIndex ) break; - index += wordIncr; - } - return carry; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addExtF80M.c b/addins/SoftFloat-3e/source/s_addExtF80M.c deleted file mode 100644 index febfb6577..000000000 --- a/addins/SoftFloat-3e/source/s_addExtF80M.c +++ /dev/null @@ -1,186 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_addExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr, - bool negateB - ) -{ - uint32_t uiA64; - int32_t expA; - uint32_t uiB64; - int32_t expB; - uint32_t uiZ64; - bool signZ, signB; - const struct extFloat80M *tempSPtr; - uint64_t sigZ, sigB; - void - (*roundPackRoutinePtr)( - bool, int32_t, uint32_t *, uint_fast8_t, struct extFloat80M * ); - int32_t expDiff; - uint32_t extSigX[3], sigZExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - expA = expExtF80UI64( uiA64 ); - uiB64 = bSPtr->signExp; - expB = expExtF80UI64( uiB64 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNExtF80M( aSPtr, bSPtr, zSPtr ) ) return; - uiZ64 = uiA64; - if ( expB == 0x7FFF ) { - uiZ64 = uiB64 ^ packToExtF80UI64( negateB, 0 ); - if ( (expA == 0x7FFF) && (uiZ64 != uiA64) ) { - softfloat_invalidExtF80M( zSPtr ); - return; - } - } - zSPtr->signExp = uiZ64; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signZ = signExtF80UI64( uiA64 ); - signB = signExtF80UI64( uiB64 ) ^ negateB; - negateB = (signZ != signB); - if ( expA < expB ) { - signZ = signB; - expA = expB; - expB = expExtF80UI64( uiA64 ); - tempSPtr = aSPtr; - aSPtr = bSPtr; - bSPtr = tempSPtr; - } - if ( ! expB ) { - expB = 1; - if ( ! expA ) expA = 1; - } - sigZ = aSPtr->signif; - sigB = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPackRoutinePtr = softfloat_roundPackMToExtF80M; - expDiff = expA - expB; - if ( expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigX[indexWord( 3, 2 )] = sigB>>32; - extSigX[indexWord( 3, 1 )] = sigB; - extSigX[indexWord( 3, 0 )] = 0; - softfloat_shiftRightJam96M( extSigX, expDiff, extSigX ); - sigB = - (uint64_t) extSigX[indexWord( 3, 2 )]<<32 - | extSigX[indexWord( 3, 1 )]; - if ( negateB ) { - sigZ -= sigB; - sigZExtra = extSigX[indexWordLo( 3 )]; - if ( sigZExtra ) { - --sigZ; - sigZExtra = -sigZExtra; - } - if ( ! (sigZ & UINT64_C( 0x8000000000000000 )) ) { - if ( sigZ & UINT64_C( 0x4000000000000000 ) ) { - --expA; - sigZ = sigZ<<1 | sigZExtra>>31; - sigZExtra <<= 1; - } else { - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } - } - } else { - sigZ += sigB; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) goto sigZ; - sigZExtra = (uint32_t) sigZ<<31 | (extSigX[indexWordLo( 3 )] != 0); - goto completeNormAfterAdd; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigZExtra = 0; - if ( negateB ) { - if ( sigZ < sigB ) { - signZ = ! signZ; - sigZ = sigB - sigZ; - } else { - sigZ -= sigB; - if ( ! sigZ ) { - signZ = (softfloat_roundingMode == softfloat_round_min); - zSPtr->signExp = packToExtF80UI64( signZ, 0 ); - zSPtr->signif = 0; - return; - } - } - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } else { - sigZ += sigB; - if ( sigZ < sigB ) { - sigZExtra = (uint32_t) sigZ<<31; - completeNormAfterAdd: - ++expA; - sigZ = UINT64_C( 0x8000000000000000 ) | sigZ>>1; - } else { - if ( ! (sigZ & UINT64_C( 0x8000000000000000 )) ) { - roundPackRoutinePtr = softfloat_normRoundPackMToExtF80M; - } - } - } - } - extSigX[indexWord( 3, 0 )] = sigZExtra; - sigZ: - extSigX[indexWord( 3, 2 )] = sigZ>>32; - extSigX[indexWord( 3, 1 )] = sigZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPack: - (*roundPackRoutinePtr)( - signZ, expA, extSigX, extF80_roundingPrecision, zSPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_addF128M.c b/addins/SoftFloat-3e/source/s_addF128M.c deleted file mode 100644 index 8ed9d271f..000000000 --- a/addins/SoftFloat-3e/source/s_addF128M.c +++ /dev/null @@ -1,211 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_addF128M( - const uint32_t *aWPtr, - const uint32_t *bWPtr, - uint32_t *zWPtr, - bool negateB - ) -{ - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - uint32_t uiZ96; - bool signZ, signB; - const uint32_t *tempPtr; - uint32_t sig96A, sig96B; - int32_t expDiff; - uint_fast8_t - (*addCarryMRoutinePtr)( - uint_fast8_t, - const uint32_t *, - const uint32_t *, - uint_fast8_t, - uint32_t * - ); - uint32_t extSigZ[5], wordSigZ; - uint_fast8_t carry; - void (*roundPackRoutinePtr)( bool, int32_t, uint32_t *, uint32_t * ); - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) return; - uiZ96 = uiA96; - if ( expB == 0x7FFF ) { - uiZ96 = uiB96 ^ packToF128UI96( negateB, 0, 0 ); - if ( (expA == 0x7FFF) && (uiZ96 != uiA96) ) { - softfloat_invalidF128M( zWPtr ); - return; - } - } - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signZ = signF128UI96( uiA96 ); - signB = signF128UI96( uiB96 ) ^ negateB; - negateB = (signZ != signB); - if ( (uint32_t) (uiA96<<1) < (uint32_t) (uiB96<<1) ) { - signZ = signB; - expA = expB; - expB = expF128UI96( uiA96 ); - tempPtr = aWPtr; - aWPtr = bWPtr; - bWPtr = tempPtr; - uiA96 = uiB96; - uiB96 = bWPtr[indexWordHi( 4 )]; - } - sig96A = fracF128UI96( uiA96 ); - sig96B = fracF128UI96( uiB96 ); - if ( expA ) { - --expA; - sig96A |= 0x00010000; - if ( expB ) { - --expB; - sig96B |= 0x00010000; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - addCarryMRoutinePtr = - negateB ? softfloat_addComplCarryM : softfloat_addCarryM; - expDiff = expA - expB; - if ( expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigZ[indexWordHi( 5 )] = sig96B; - extSigZ[indexWord( 5, 3 )] = bWPtr[indexWord( 4, 2 )]; - extSigZ[indexWord( 5, 2 )] = bWPtr[indexWord( 4, 1 )]; - extSigZ[indexWord( 5, 1 )] = bWPtr[indexWord( 4, 0 )]; - extSigZ[indexWord( 5, 0 )] = 0; - softfloat_shiftRightJam160M( extSigZ, expDiff, extSigZ ); - sig96B = extSigZ[indexWordHi( 5 )]; - carry = 0; - if ( negateB ) { - sig96B = ~sig96B; - wordSigZ = extSigZ[indexWordLo( 5 )]; - extSigZ[indexWordLo( 5 )] = -wordSigZ; - carry = ! wordSigZ; - } - carry = - (*addCarryMRoutinePtr)( - 3, - &aWPtr[indexMultiwordLo( 4, 3 )], - &extSigZ[indexMultiword( 5, 3, 1 )], - carry, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - wordSigZ = sig96A + sig96B + carry; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - extSigZ[indexWordLo( 5 )] = 0; - carry = - (*addCarryMRoutinePtr)( - 3, - &aWPtr[indexMultiwordLo( 4, 3 )], - &bWPtr[indexMultiwordLo( 4, 3 )], - negateB, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - if ( negateB ) { - wordSigZ = sig96A + ~sig96B + carry; - if ( wordSigZ & 0x80000000 ) { - signZ = ! signZ; - carry = - softfloat_addComplCarry96M( - &bWPtr[indexMultiwordLo( 4, 3 )], - &aWPtr[indexMultiwordLo( 4, 3 )], - 1, - &extSigZ[indexMultiword( 5, 3, 1 )] - ); - wordSigZ = sig96B + ~sig96A + carry; - } else { - if ( - ! wordSigZ && ! extSigZ[indexWord( 5, 3 )] - && ! ( extSigZ[indexWord( 5, 2 )] - | extSigZ[indexWord( 5, 1 )] - | extSigZ[indexWord( 5, 0 )] - ) - ) { - signZ = (softfloat_roundingMode == softfloat_round_min); - zWPtr[indexWordHi( 4 )] = packToF128UI96( signZ, 0, 0 ); - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - } - } else { - wordSigZ = sig96A + sig96B + carry; - } - } - extSigZ[indexWordHi( 5 )] = wordSigZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundPackRoutinePtr = softfloat_normRoundPackMToF128M; - if ( 0x00010000 <= wordSigZ ) { - if ( 0x00020000 <= wordSigZ ) { - ++expA; - softfloat_shortShiftRightJam160M( extSigZ, 1, extSigZ ); - } - roundPackRoutinePtr = softfloat_roundPackMToF128M; - } - (*roundPackRoutinePtr)( signZ, expA, extSigZ, zWPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_addM.c b/addins/SoftFloat-3e/source/s_addM.c deleted file mode 100644 index c935baaf7..000000000 --- a/addins/SoftFloat-3e/source/s_addM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_addM - -void - softfloat_addM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint_fast8_t carry; - uint32_t wordA, wordZ; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - carry = 0; - for (;;) { - wordA = aPtr[index]; - wordZ = wordA + bPtr[index] + carry; - zPtr[index] = wordZ; - if ( index == lastIndex ) break; - if ( wordZ != wordA ) carry = (wordZ < wordA); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_addMagsExtF80.c b/addins/SoftFloat-3e/source/s_addMagsExtF80.c deleted file mode 100644 index b1bb5dbe6..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsExtF80.c +++ /dev/null @@ -1,156 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - softfloat_addMagsExtF80( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - uint_fast64_t sigA; - int_fast32_t expB; - uint_fast64_t sigB; - int_fast32_t expDiff; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0, sigZ, sigZExtra; - struct exp32_sig64 normExpSig; - int_fast32_t expZ; - struct uint64_extra sig64Extra; - struct uint128 uiZ; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - if ( expA == 0x7FFF ) { - if ( (sigA | sigB) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - goto propagateNaN; - } - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - sigZ = sigA + sigB; - sigZExtra = 0; - if ( ! expA ) { - normExpSig = softfloat_normSubnormalExtF80Sig( sigZ ); - expZ = normExpSig.exp + 1; - sigZ = normExpSig.sig; - goto roundAndPack; - } - expZ = expA; - goto shiftRight1; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = packToExtF80UI64( signZ, 0x7FFF ); - uiZ0 = uiB0; - goto uiZ; - } - expZ = expB; - if ( ! expA ) { - ++expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig64Extra = softfloat_shiftRightJam64Extra( sigA, 0, -expDiff ); - sigA = sig64Extra.v; - sigZExtra = sig64Extra.extra; - } else { - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - expZ = expA; - if ( ! expB ) { - --expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig64Extra = softfloat_shiftRightJam64Extra( sigB, 0, expDiff ); - sigB = sig64Extra.v; - sigZExtra = sig64Extra.extra; - } - newlyAligned: - sigZ = sigA + sigB; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) goto roundAndPack; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftRight1: - sig64Extra = softfloat_shortShiftRightJam64Extra( sigZ, sigZExtra, 1 ); - sigZ = sig64Extra.v | UINT64_C( 0x8000000000000000 ); - sigZExtra = sig64Extra.extra; - ++expZ; - roundAndPack: - return - softfloat_roundPackToExtF80( - signZ, expZ, sigZ, sigZExtra, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF128.c b/addins/SoftFloat-3e/source/s_addMagsF128.c deleted file mode 100644 index 8e5ce5b34..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF128.c +++ /dev/null @@ -1,154 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float128_t - softfloat_addMagsF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - struct uint128 sigA; - int_fast32_t expB; - struct uint128 sigB; - int_fast32_t expDiff; - struct uint128 uiZ, sigZ; - int_fast32_t expZ; - uint_fast64_t sigZExtra; - struct uint128_extra sig128Extra; - union ui128_f128 uZ; - - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - expDiff = expA - expB; - if ( ! expDiff ) { - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 | sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - sigZ = softfloat_add128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ); - if ( ! expA ) { - uiZ.v64 = packToF128UI64( signZ, 0, sigZ.v64 ); - uiZ.v0 = sigZ.v0; - goto uiZ; - } - expZ = expA; - sigZ.v64 |= UINT64_C( 0x0002000000000000 ); - sigZExtra = 0; - goto shiftRight1; - } - if ( expDiff < 0 ) { - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - expZ = expB; - if ( expA ) { - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - } else { - ++expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig128Extra = - softfloat_shiftRightJam128Extra( sigA.v64, sigA.v0, 0, -expDiff ); - sigA = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } else { - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - expZ = expA; - if ( expB ) { - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - } else { - --expDiff; - sigZExtra = 0; - if ( ! expDiff ) goto newlyAligned; - } - sig128Extra = - softfloat_shiftRightJam128Extra( sigB.v64, sigB.v0, 0, expDiff ); - sigB = sig128Extra.v; - sigZExtra = sig128Extra.extra; - } - newlyAligned: - sigZ = - softfloat_add128( - sigA.v64 | UINT64_C( 0x0001000000000000 ), - sigA.v0, - sigB.v64, - sigB.v0 - ); - --expZ; - if ( sigZ.v64 < UINT64_C( 0x0002000000000000 ) ) goto roundAndPack; - ++expZ; - shiftRight1: - sig128Extra = - softfloat_shortShiftRightJam128Extra( - sigZ.v64, sigZ.v0, sigZExtra, 1 ); - sigZ = sig128Extra.v; - sigZExtra = sig128Extra.extra; - roundAndPack: - return - softfloat_roundPackToF128( signZ, expZ, sigZ.v64, sigZ.v0, sigZExtra ); - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF16.c b/addins/SoftFloat-3e/source/s_addMagsF16.c deleted file mode 100644 index b7fba0928..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF16.c +++ /dev/null @@ -1,183 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t softfloat_addMagsF16( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - int_fast8_t expA; - uint_fast16_t sigA; - int_fast8_t expB; - uint_fast16_t sigB; - int_fast8_t expDiff; - uint_fast16_t uiZ; - bool signZ; - int_fast8_t expZ; - uint_fast16_t sigZ; - uint_fast16_t sigX, sigY; - int_fast8_t shiftDist; - uint_fast32_t sig32Z; - int_fast8_t roundingMode; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0x1F ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - signZ = signF16UI( uiA ); - expZ = expA; - sigZ = 0x0800 + sigA + sigB; - if ( ! (sigZ & 1) && (expZ < 0x1E) ) { - sigZ >>= 1; - goto pack; - } - sigZ <<= 3; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signF16UI( uiA ); - if ( expDiff < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF16UI( signZ, 0x1F, 0 ); - goto uiZ; - } - if ( expDiff <= -13 ) { - uiZ = packToF16UI( signZ, expB, sigB ); - if ( expA | sigA ) goto addEpsilon; - goto uiZ; - } - expZ = expB; - sigX = sigB | 0x0400; - sigY = sigA + (expA ? 0x0400 : sigA); - shiftDist = 19 + expDiff; - } else { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - uiZ = uiA; - if ( expA == 0x1F ) { - if ( sigA ) goto propagateNaN; - goto uiZ; - } - if ( 13 <= expDiff ) { - if ( expB | sigB ) goto addEpsilon; - goto uiZ; - } - expZ = expA; - sigX = sigA | 0x0400; - sigY = sigB + (expB ? 0x0400 : sigB); - shiftDist = 19 - expDiff; - } - sig32Z = - ((uint_fast32_t) sigX<<19) + ((uint_fast32_t) sigY<>16; - if ( sig32Z & 0xFFFF ) { - sigZ |= 1; - } else { - if ( ! (sigZ & 0xF) && (expZ < 0x1E) ) { - sigZ >>= 4; - goto pack; - } - } - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - addEpsilon: - roundingMode = softfloat_roundingMode; - if ( roundingMode != softfloat_round_near_even ) { - if ( - roundingMode - == (signF16UI( uiZ ) ? softfloat_round_min - : softfloat_round_max) - ) { - ++uiZ; - if ( (uint16_t) (uiZ<<1) == 0xF800 ) { - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - } - } -#ifdef SOFTFLOAT_ROUND_ODD - else if ( roundingMode == softfloat_round_odd ) { - uiZ |= 1; - } -#endif - } - softfloat_exceptionFlags |= softfloat_flag_inexact; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - pack: - uiZ = packToF16UI( signZ, expZ, sigZ ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF32.c b/addins/SoftFloat-3e/source/s_addMagsF32.c deleted file mode 100644 index b74489dec..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF32.c +++ /dev/null @@ -1,126 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float32_t softfloat_addMagsF32( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - int_fast16_t expA; - uint_fast32_t sigA; - int_fast16_t expB; - uint_fast32_t sigB; - int_fast16_t expDiff; - uint_fast32_t uiZ; - bool signZ; - int_fast16_t expZ; - uint_fast32_t sigZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0xFF ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - signZ = signF32UI( uiA ); - expZ = expA; - sigZ = 0x01000000 + sigA + sigB; - if ( ! (sigZ & 1) && (expZ < 0xFE) ) { - uiZ = packToF32UI( signZ, expZ, sigZ>>1 ); - goto uiZ; - } - sigZ <<= 6; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signF32UI( uiA ); - sigA <<= 6; - sigB <<= 6; - if ( expDiff < 0 ) { - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF32UI( signZ, 0xFF, 0 ); - goto uiZ; - } - expZ = expB; - sigA += expA ? 0x20000000 : sigA; - sigA = softfloat_shiftRightJam32( sigA, -expDiff ); - } else { - if ( expA == 0xFF ) { - if ( sigA ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - sigB += expB ? 0x20000000 : sigB; - sigB = softfloat_shiftRightJam32( sigB, expDiff ); - } - sigZ = 0x20000000 + sigA + sigB; - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - } - return softfloat_roundPackToF32( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF32UI( uiA, uiB ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_addMagsF64.c b/addins/SoftFloat-3e/source/s_addMagsF64.c deleted file mode 100644 index e8a489874..000000000 --- a/addins/SoftFloat-3e/source/s_addMagsF64.c +++ /dev/null @@ -1,128 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -float64_t - softfloat_addMagsF64( uint_fast64_t uiA, uint_fast64_t uiB, bool signZ ) -{ - int_fast16_t expA; - uint_fast64_t sigA; - int_fast16_t expB; - uint_fast64_t sigB; - int_fast16_t expDiff; - uint_fast64_t uiZ; - int_fast16_t expZ; - uint_fast64_t sigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! expA ) { - uiZ = uiA + sigB; - goto uiZ; - } - if ( expA == 0x7FF ) { - if ( sigA | sigB ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - sigZ = UINT64_C( 0x0020000000000000 ) + sigA + sigB; - sigZ <<= 9; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigA <<= 9; - sigB <<= 9; - if ( expDiff < 0 ) { - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN; - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - goto uiZ; - } - expZ = expB; - if ( expA ) { - sigA += UINT64_C( 0x2000000000000000 ); - } else { - sigA <<= 1; - } - sigA = softfloat_shiftRightJam64( sigA, -expDiff ); - } else { - if ( expA == 0x7FF ) { - if ( sigA ) goto propagateNaN; - uiZ = uiA; - goto uiZ; - } - expZ = expA; - if ( expB ) { - sigB += UINT64_C( 0x2000000000000000 ); - } else { - sigB <<= 1; - } - sigB = softfloat_shiftRightJam64( sigB, expDiff ); - } - sigZ = UINT64_C( 0x2000000000000000 ) + sigA + sigB; - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - } - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_approxRecip32_1.c b/addins/SoftFloat-3e/source/s_approxRecip32_1.c deleted file mode 100644 index 4a326a438..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecip32_1.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_approxRecip32_1 - -extern const uint16_t softfloat_approxRecip_1k0s[16]; -extern const uint16_t softfloat_approxRecip_1k1s[16]; - -uint32_t softfloat_approxRecip32_1( uint32_t a ) -{ - int index; - uint16_t eps, r0; - uint32_t sigma0; - uint_fast32_t r; - uint32_t sqrSigma0; - - index = a>>27 & 0xF; - eps = (uint16_t) (a>>11); - r0 = softfloat_approxRecip_1k0s[index] - - ((softfloat_approxRecip_1k1s[index] * (uint_fast32_t) eps)>>20); - sigma0 = ~(uint_fast32_t) ((r0 * (uint_fast64_t) a)>>7); - r = ((uint_fast32_t) r0<<16) + ((r0 * (uint_fast64_t) sigma0)>>24); - sqrSigma0 = ((uint_fast64_t) sigma0 * sigma0)>>32; - r += ((uint32_t) r * (uint_fast64_t) sqrSigma0)>>48; - return r; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c b/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c deleted file mode 100644 index b3fdeba68..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecipSqrt32_1.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_approxRecipSqrt32_1 - -extern const uint16_t softfloat_approxRecipSqrt_1k0s[]; -extern const uint16_t softfloat_approxRecipSqrt_1k1s[]; - -uint32_t softfloat_approxRecipSqrt32_1( unsigned int oddExpA, uint32_t a ) -{ - int index; - uint16_t eps, r0; - uint_fast32_t ESqrR0; - uint32_t sigma0; - uint_fast32_t r; - uint32_t sqrSigma0; - - index = (a>>27 & 0xE) + oddExpA; - eps = (uint16_t) (a>>12); - r0 = softfloat_approxRecipSqrt_1k0s[index] - - ((softfloat_approxRecipSqrt_1k1s[index] * (uint_fast32_t) eps) - >>20); - ESqrR0 = (uint_fast32_t) r0 * r0; - if ( ! oddExpA ) ESqrR0 <<= 1; - sigma0 = ~(uint_fast32_t) (((uint32_t) ESqrR0 * (uint_fast64_t) a)>>23); - r = ((uint_fast32_t) r0<<16) + ((r0 * (uint_fast64_t) sigma0)>>25); - sqrSigma0 = ((uint_fast64_t) sigma0 * sigma0)>>32; - r += ((uint32_t) ((r>>1) + (r>>3) - ((uint_fast32_t) r0<<14)) - * (uint_fast64_t) sqrSigma0) - >>48; - if ( ! (r & 0x80000000) ) r = 0x80000000; - return r; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c b/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c deleted file mode 100644 index 38a27985c..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" - -const uint16_t softfloat_approxRecipSqrt_1k0s[16] = { - 0xB4C9, 0xFFAB, 0xAA7D, 0xF11C, 0xA1C5, 0xE4C7, 0x9A43, 0xDA29, - 0x93B5, 0xD0E5, 0x8DED, 0xC8B7, 0x88C6, 0xC16D, 0x8424, 0xBAE1 -}; -const uint16_t softfloat_approxRecipSqrt_1k1s[16] = { - 0xA5A5, 0xEA42, 0x8C21, 0xC62D, 0x788F, 0xAA7F, 0x6928, 0x94B6, - 0x5CC7, 0x8335, 0x52A6, 0x74E2, 0x4A3E, 0x68FE, 0x432B, 0x5EFD -}; - diff --git a/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c b/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c deleted file mode 100644 index f1fca74e7..000000000 --- a/addins/SoftFloat-3e/source/s_approxRecip_1Ks.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" - -const uint16_t softfloat_approxRecip_1k0s[16] = { - 0xFFC4, 0xF0BE, 0xE363, 0xD76F, 0xCCAD, 0xC2F0, 0xBA16, 0xB201, - 0xAA97, 0xA3C6, 0x9D7A, 0x97A6, 0x923C, 0x8D32, 0x887E, 0x8417 -}; -const uint16_t softfloat_approxRecip_1k1s[16] = { - 0xF0F1, 0xD62C, 0xBFA1, 0xAC77, 0x9C0A, 0x8DDB, 0x8185, 0x76BA, - 0x6D3B, 0x64D4, 0x5D5C, 0x56B1, 0x50B6, 0x4B55, 0x4679, 0x4211 -}; - diff --git a/addins/SoftFloat-3e/source/s_compare128M.c b/addins/SoftFloat-3e/source/s_compare128M.c deleted file mode 100644 index dc97ce9e5..000000000 --- a/addins/SoftFloat-3e/source/s_compare128M.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_compare128M - -int_fast8_t softfloat_compare128M( const uint32_t *aPtr, const uint32_t *bPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordB; - - index = indexWordHi( 4 ); - lastIndex = indexWordLo( 4 ); - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - if ( wordA != wordB ) return (wordA < wordB) ? -1 : 1; - if ( index == lastIndex ) break; - index -= wordIncr; - } - return 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_compare96M.c b/addins/SoftFloat-3e/source/s_compare96M.c deleted file mode 100644 index 2681c4627..000000000 --- a/addins/SoftFloat-3e/source/s_compare96M.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_compare96M - -int_fast8_t softfloat_compare96M( const uint32_t *aPtr, const uint32_t *bPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA, wordB; - - index = indexWordHi( 3 ); - lastIndex = indexWordLo( 3 ); - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - if ( wordA != wordB ) return (wordA < wordB) ? -1 : 1; - if ( index == lastIndex ) break; - index -= wordIncr; - } - return 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c b/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c deleted file mode 100644 index 267315304..000000000 --- a/addins/SoftFloat-3e/source/s_compareNonnormExtF80M.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat_types.h" - -int - softfloat_compareNonnormExtF80M( - const struct extFloat80M *aSPtr, const struct extFloat80M *bSPtr ) -{ - uint_fast16_t uiA64, uiB64; - uint64_t sigA; - bool signB; - uint64_t sigB; - int32_t expA, expB; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA64 = aSPtr->signExp; - uiB64 = bSPtr->signExp; - sigA = aSPtr->signif; - signB = signExtF80UI64( uiB64 ); - sigB = bSPtr->signif; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( (uiA64 ^ uiB64) & 0x8000 ) { - if ( ! (sigA | sigB) ) return 0; - goto resultFromSignB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - expB = expExtF80UI64( uiB64 ); - if ( expA == 0x7FFF ) { - if (expB == 0x7FFF) return 0; - signB = ! signB; - goto resultFromSignB; - } - if ( expB == 0x7FFF ) { - goto resultFromSignB; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) expA = 1; - if ( ! (sigA & UINT64_C( 0x8000000000000000 )) ) { - if ( sigA ) { - expA += softfloat_normExtF80SigM( &sigA ); - } else { - expA = -128; - } - } - if ( ! expB ) expB = 1; - if ( ! (sigB & UINT64_C( 0x8000000000000000 )) ) { - if ( sigB ) { - expB += softfloat_normExtF80SigM( &sigB ); - } else { - expB = -128; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signB ) { - if ( expA < expB ) return 1; - if ( (expB < expA) || (sigB < sigA) ) return -1; - } else { - if ( expB < expA ) return 1; - if ( (expA < expB) || (sigA < sigB) ) return -1; - } - return (sigA != sigB); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - resultFromSignB: - return signB ? 1 : -1; - -} - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros16.c b/addins/SoftFloat-3e/source/s_countLeadingZeros16.c deleted file mode 100644 index 7a68da52f..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros16.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_countLeadingZeros16 - -#define softfloat_countLeadingZeros16 softfloat_countLeadingZeros16 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros16( uint16_t a ) -{ - uint_fast8_t count; - - count = 8; - if ( 0x100 <= a ) { - count = 0; - a >>= 8; - } - count += softfloat_countLeadingZeros8[a]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros32.c b/addins/SoftFloat-3e/source/s_countLeadingZeros32.c deleted file mode 100644 index 53ab22824..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros32.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_countLeadingZeros32 - -#define softfloat_countLeadingZeros32 softfloat_countLeadingZeros32 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros32( uint32_t a ) -{ - uint_fast8_t count; - - count = 0; - if ( a < 0x10000 ) { - count = 16; - a <<= 16; - } - if ( a < 0x1000000 ) { - count += 8; - a <<= 8; - } - count += softfloat_countLeadingZeros8[a>>24]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros64.c b/addins/SoftFloat-3e/source/s_countLeadingZeros64.c deleted file mode 100644 index 13a222463..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros64.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_countLeadingZeros64 - -#define softfloat_countLeadingZeros64 softfloat_countLeadingZeros64 -#include "primitives.h" - -uint_fast8_t softfloat_countLeadingZeros64( uint64_t a ) -{ - uint_fast8_t count; - uint32_t a32; - - count = 0; - a32 = a>>32; - if ( ! a32 ) { - count = 32; - a32 = a; - } - /*------------------------------------------------------------------------ - | From here, result is current count + count leading zeros of `a32'. - *------------------------------------------------------------------------*/ - if ( a32 < 0x10000 ) { - count += 16; - a32 <<= 16; - } - if ( a32 < 0x1000000 ) { - count += 8; - a32 <<= 8; - } - count += softfloat_countLeadingZeros8[a32>>24]; - return count; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_countLeadingZeros8.c b/addins/SoftFloat-3e/source/s_countLeadingZeros8.c deleted file mode 100644 index a56f5a40c..000000000 --- a/addins/SoftFloat-3e/source/s_countLeadingZeros8.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" - -const uint_least8_t softfloat_countLeadingZeros8[256] = { - 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, - 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - diff --git a/addins/SoftFloat-3e/source/s_eq128.c b/addins/SoftFloat-3e/source/s_eq128.c deleted file mode 100644 index 275b8ae29..000000000 --- a/addins/SoftFloat-3e/source/s_eq128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" - -#ifndef softfloat_eq128 - -bool softfloat_eq128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 == b64) && (a0 == b0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_invalidExtF80M.c b/addins/SoftFloat-3e/source/s_invalidExtF80M.c deleted file mode 100644 index 237d21721..000000000 --- a/addins/SoftFloat-3e/source/s_invalidExtF80M.c +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include "platform.h" -#include "specialize.h" -#include "softfloat.h" - -void softfloat_invalidExtF80M( struct extFloat80M *zSPtr ) -{ - - softfloat_raiseFlags( softfloat_flag_invalid ); - zSPtr->signExp = defaultNaNExtF80UI64; - zSPtr->signif = defaultNaNExtF80UI0; - -} - diff --git a/addins/SoftFloat-3e/source/s_invalidF128M.c b/addins/SoftFloat-3e/source/s_invalidF128M.c deleted file mode 100644 index a20840e5f..000000000 --- a/addins/SoftFloat-3e/source/s_invalidF128M.c +++ /dev/null @@ -1,53 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitives.h" -#include "specialize.h" -#include "softfloat.h" - -void softfloat_invalidF128M( uint32_t *zWPtr ) -{ - - softfloat_raiseFlags( softfloat_flag_invalid ); - zWPtr[indexWord( 4, 3 )] = defaultNaNF128UI96; - zWPtr[indexWord( 4, 2 )] = defaultNaNF128UI64; - zWPtr[indexWord( 4, 1 )] = defaultNaNF128UI32; - zWPtr[indexWord( 4, 0 )] = defaultNaNF128UI0; - -} - diff --git a/addins/SoftFloat-3e/source/s_isNaNF128M.c b/addins/SoftFloat-3e/source/s_isNaNF128M.c deleted file mode 100644 index 6008cf3eb..000000000 --- a/addins/SoftFloat-3e/source/s_isNaNF128M.c +++ /dev/null @@ -1,57 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "primitives.h" - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -bool softfloat_isNaNF128M( const uint32_t *aWPtr ) -{ - uint32_t uiA96; - - uiA96 = aWPtr[indexWordHi( 4 )]; - if ( (~uiA96 & 0x7FFF0000) != 0 ) return false; - return - ((uiA96 & 0x0000FFFF) != 0) - || ((aWPtr[indexWord( 4, 2 )] | aWPtr[indexWord( 4, 1 )] - | aWPtr[indexWord( 4, 0 )]) - != 0); - -} - diff --git a/addins/SoftFloat-3e/source/s_le128.c b/addins/SoftFloat-3e/source/s_le128.c deleted file mode 100644 index 1fce7af98..000000000 --- a/addins/SoftFloat-3e/source/s_le128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" - -#ifndef softfloat_le128 - -bool softfloat_le128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 < b64) || ((a64 == b64) && (a0 <= b0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_lt128.c b/addins/SoftFloat-3e/source/s_lt128.c deleted file mode 100644 index d7ce3b997..000000000 --- a/addins/SoftFloat-3e/source/s_lt128.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" - -#ifndef softfloat_lt128 - -bool softfloat_lt128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - - return (a64 < b64) || ((a64 == b64) && (a0 < b0)); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128By32.c b/addins/SoftFloat-3e/source/s_mul128By32.c deleted file mode 100644 index 7c0fdc867..000000000 --- a/addins/SoftFloat-3e/source/s_mul128By32.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul128By32 - -struct uint128 softfloat_mul128By32( uint64_t a64, uint64_t a0, uint32_t b ) -{ - struct uint128 z; - uint_fast64_t mid; - uint_fast32_t carry; - - z.v0 = a0 * b; - mid = (uint_fast64_t) (uint32_t) (a0>>32) * b; - carry = (uint32_t) ((uint_fast32_t) (z.v0>>32) - (uint_fast32_t) mid); - z.v64 = a64 * b + (uint_fast32_t) ((mid + carry)>>32); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128MTo256M.c b/addins/SoftFloat-3e/source/s_mul128MTo256M.c deleted file mode 100644 index ea8865ea3..000000000 --- a/addins/SoftFloat-3e/source/s_mul128MTo256M.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul128MTo256M - -void - softfloat_mul128MTo256M( - const uint32_t *aPtr, const uint32_t *bPtr, uint32_t *zPtr ) -{ - uint32_t *lastZPtr, wordB; - uint64_t dwordProd; - uint32_t wordZ; - uint_fast8_t carry; - - bPtr += indexWordLo( 4 ); - lastZPtr = zPtr + indexMultiwordHi( 8, 5 ); - zPtr += indexMultiwordLo( 8, 5 ); - wordB = *bPtr; - dwordProd = (uint64_t) aPtr[indexWord( 4, 0 )] * wordB; - zPtr[indexWord( 5, 0 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 1 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 1 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 2 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 2 )] = dwordProd; - dwordProd = (uint64_t) aPtr[indexWord( 4, 3 )] * wordB + (dwordProd>>32); - zPtr[indexWord( 5, 3 )] = dwordProd; - zPtr[indexWord( 5, 4 )] = dwordProd>>32; - do { - bPtr += wordIncr; - zPtr += wordIncr; - wordB = *bPtr; - dwordProd = (uint64_t) aPtr[indexWord( 4, 0 )] * wordB; - wordZ = zPtr[indexWord( 5, 0 )] + (uint32_t) dwordProd; - zPtr[indexWord( 5, 0 )] = wordZ; - carry = (wordZ < (uint32_t) dwordProd); - dwordProd = - (uint64_t) aPtr[indexWord( 4, 1 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 1 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 1 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - dwordProd = - (uint64_t) aPtr[indexWord( 4, 2 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 2 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 2 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - dwordProd = - (uint64_t) aPtr[indexWord( 4, 3 )] * wordB + (dwordProd>>32); - wordZ = zPtr[indexWord( 5, 3 )] + (uint32_t) dwordProd + carry; - zPtr[indexWord( 5, 3 )] = wordZ; - if ( wordZ != (uint32_t) dwordProd ) { - carry = (wordZ < (uint32_t) dwordProd); - } - zPtr[indexWord( 5, 4 )] = (dwordProd>>32) + carry; - } while ( zPtr != lastZPtr ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul128To256M.c b/addins/SoftFloat-3e/source/s_mul128To256M.c deleted file mode 100644 index 7c9d9b584..000000000 --- a/addins/SoftFloat-3e/source/s_mul128To256M.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_mul128To256M - -#define softfloat_mul128To256M softfloat_mul128To256M -#include "primitives.h" - -void - softfloat_mul128To256M( - uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0, uint64_t *zPtr ) -{ - struct uint128 p0, p64, p128; - uint_fast64_t z64, z128, z192; - - p0 = softfloat_mul64To128( a0, b0 ); - zPtr[indexWord( 4, 0 )] = p0.v0; - p64 = softfloat_mul64To128( a64, b0 ); - z64 = p64.v0 + p0.v64; - z128 = p64.v64 + (z64 < p64.v0); - p128 = softfloat_mul64To128( a64, b64 ); - z128 += p128.v0; - z192 = p128.v64 + (z128 < p128.v0); - p64 = softfloat_mul64To128( a0, b64 ); - z64 += p64.v0; - zPtr[indexWord( 4, 1 )] = z64; - p64.v64 += (z64 < p64.v0); - z128 += p64.v64; - zPtr[indexWord( 4, 2 )] = z128; - zPtr[indexWord( 4, 3 )] = z192 + (z128 < p64.v64); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c b/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c deleted file mode 100644 index 57e528888..000000000 --- a/addins/SoftFloat-3e/source/s_mul64ByShifted32To128.c +++ /dev/null @@ -1,56 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64ByShifted32To128 - -struct uint128 softfloat_mul64ByShifted32To128( uint64_t a, uint32_t b ) -{ - uint_fast64_t mid; - struct uint128 z; - - mid = (uint_fast64_t) (uint32_t) a * b; - z.v0 = mid<<32; - z.v64 = (uint_fast64_t) (uint32_t) (a>>32) * b + (mid>>32); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64To128.c b/addins/SoftFloat-3e/source/s_mul64To128.c deleted file mode 100644 index 5d360aa4b..000000000 --- a/addins/SoftFloat-3e/source/s_mul64To128.c +++ /dev/null @@ -1,66 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64To128 - -struct uint128 softfloat_mul64To128( uint64_t a, uint64_t b ) -{ - uint32_t a32, a0, b32, b0; - struct uint128 z; - uint64_t mid1, mid; - - a32 = a>>32; - a0 = a; - b32 = b>>32; - b0 = b; - z.v0 = (uint_fast64_t) a0 * b0; - mid1 = (uint_fast64_t) a32 * b0; - mid = mid1 + (uint_fast64_t) a0 * b32; - z.v64 = (uint_fast64_t) a32 * b32; - z.v64 += (uint_fast64_t) (mid < mid1)<<32 | mid>>32; - mid <<= 32; - z.v0 += mid; - z.v64 += (z.v0 < mid); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mul64To128M.c b/addins/SoftFloat-3e/source/s_mul64To128M.c deleted file mode 100644 index ed10be324..000000000 --- a/addins/SoftFloat-3e/source/s_mul64To128M.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_mul64To128M - -void softfloat_mul64To128M( uint64_t a, uint64_t b, uint32_t *zPtr ) -{ - uint32_t a32, a0, b32, b0; - uint64_t z0, mid1, z64, mid; - - a32 = a>>32; - a0 = a; - b32 = b>>32; - b0 = b; - z0 = (uint64_t) a0 * b0; - mid1 = (uint64_t) a32 * b0; - mid = mid1 + (uint64_t) a0 * b32; - z64 = (uint64_t) a32 * b32; - z64 += (uint64_t) (mid < mid1)<<32 | mid>>32; - mid <<= 32; - z0 += mid; - zPtr[indexWord( 4, 1 )] = z0>>32; - zPtr[indexWord( 4, 0 )] = z0; - z64 += (z0 < mid); - zPtr[indexWord( 4, 3 )] = z64>>32; - zPtr[indexWord( 4, 2 )] = z64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_mulAddF128.c b/addins/SoftFloat-3e/source/s_mulAddF128.c deleted file mode 100644 index f6b2b45df..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF128.c +++ /dev/null @@ -1,350 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - softfloat_mulAddF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - uint_fast64_t uiC64, - uint_fast64_t uiC0, - uint_fast8_t op - ) -{ - bool signA; - int_fast32_t expA; - struct uint128 sigA; - bool signB; - int_fast32_t expB; - struct uint128 sigB; - bool signC; - int_fast32_t expC; - struct uint128 sigC; - bool signZ; - uint_fast64_t magBits; - struct uint128 uiZ; - struct exp32_sig128 normExpSig; - int_fast32_t expZ; - uint64_t sig256Z[4]; - struct uint128 sigZ; - int_fast32_t shiftDist, expDiff; - struct uint128 x128; - uint64_t sig256C[4]; - static uint64_t zero256[4] = INIT_UINTM4( 0, 0, 0, 0 ); - uint_fast64_t sigZExtra, sig256Z0; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF128UI64( uiA64 ); - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - signB = signF128UI64( uiB64 ); - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - signC = signF128UI64( uiC64 ) ^ (op == softfloat_mulAdd_subC); - expC = expF128UI64( uiC64 ); - sigC.v64 = fracF128UI64( uiC64 ); - sigC.v0 = uiC0; - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FFF ) { - if ( - (sigA.v64 | sigA.v0) || ((expB == 0x7FFF) && (sigB.v64 | sigB.v0)) - ) { - goto propagateNaN_ABC; - } - magBits = expB | sigB.v64 | sigB.v0; - goto infProdArg; - } - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN_ABC; - magBits = expA | sigA.v64 | sigA.v0; - goto infProdArg; - } - if ( expC == 0x7FFF ) { - if ( sigC.v64 | sigC.v0 ) { - uiZ.v64 = 0; - uiZ.v0 = 0; - goto propagateNaN_ZC; - } - uiZ.v64 = uiC64; - uiZ.v0 = uiC0; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! (sigA.v64 | sigA.v0) ) goto zeroProd; - normExpSig = softfloat_normSubnormalF128Sig( sigA.v64, sigA.v0 ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! (sigB.v64 | sigB.v0) ) goto zeroProd; - normExpSig = softfloat_normSubnormalF128Sig( sigB.v64, sigB.v0 ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FFE; - sigA.v64 |= UINT64_C( 0x0001000000000000 ); - sigB.v64 |= UINT64_C( 0x0001000000000000 ); - sigA = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 8 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 15 ); - softfloat_mul128To256M( sigA.v64, sigA.v0, sigB.v64, sigB.v0, sig256Z ); - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - shiftDist = 0; - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = -1; - } - if ( ! expC ) { - if ( ! (sigC.v64 | sigC.v0) ) { - shiftDist += 8; - goto sigZ; - } - normExpSig = softfloat_normSubnormalF128Sig( sigC.v64, sigC.v0 ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC.v64 |= UINT64_C( 0x0001000000000000 ); - sigC = softfloat_shortShiftLeft128( sigC.v64, sigC.v0, 8 ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - shiftDist -= expDiff; - if ( shiftDist ) { - sigZ = - softfloat_shiftRightJam128( sigZ.v64, sigZ.v0, shiftDist ); - } - } else { - if ( ! shiftDist ) { - x128 = - softfloat_shortShiftRight128( - sig256Z[indexWord( 4, 1 )], sig256Z[indexWord( 4, 0 )], - 1 - ); - sig256Z[indexWord( 4, 1 )] = (sigZ.v0<<63) | x128.v64; - sig256Z[indexWord( 4, 0 )] = x128.v0; - sigZ = softfloat_shortShiftRight128( sigZ.v64, sigZ.v0, 1 ); - sig256Z[indexWord( 4, 3 )] = sigZ.v64; - sig256Z[indexWord( 4, 2 )] = sigZ.v0; - } - } - } else { - if ( shiftDist ) softfloat_add256M( sig256Z, sig256Z, sig256Z ); - if ( ! expDiff ) { - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - } else { - sig256C[indexWord( 4, 3 )] = sigC.v64; - sig256C[indexWord( 4, 2 )] = sigC.v0; - sig256C[indexWord( 4, 1 )] = 0; - sig256C[indexWord( 4, 0 )] = 0; - softfloat_shiftRightJam256M( sig256C, expDiff, sig256C ); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - shiftDist = 8; - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ = softfloat_add128( sigC.v64, sigC.v0, sigZ.v64, sigZ.v0 ); - } else { - softfloat_add256M( sig256Z, sig256C, sig256Z ); - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - } - if ( sigZ.v64 & UINT64_C( 0x0200000000000000 ) ) { - ++expZ; - shiftDist = 9; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - if ( expDiff < -1 ) { - sigZ = - softfloat_sub128( sigC.v64, sigC.v0, sigZ.v64, sigZ.v0 ); - sigZExtra = - sig256Z[indexWord( 4, 1 )] | sig256Z[indexWord( 4, 0 )]; - if ( sigZExtra ) { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, 0, 1 ); - } - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = 7; - } - goto shiftRightRoundPack; - } else { - sig256C[indexWord( 4, 3 )] = sigC.v64; - sig256C[indexWord( 4, 2 )] = sigC.v0; - sig256C[indexWord( 4, 1 )] = 0; - sig256C[indexWord( 4, 0 )] = 0; - softfloat_sub256M( sig256C, sig256Z, sig256Z ); - } - } else if ( ! expDiff ) { - sigZ = softfloat_sub128( sigZ.v64, sigZ.v0, sigC.v64, sigC.v0 ); - if ( - ! (sigZ.v64 | sigZ.v0) && ! sig256Z[indexWord( 4, 1 )] - && ! sig256Z[indexWord( 4, 0 )] - ) { - goto completeCancellation; - } - sig256Z[indexWord( 4, 3 )] = sigZ.v64; - sig256Z[indexWord( 4, 2 )] = sigZ.v0; - if ( sigZ.v64 & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - softfloat_sub256M( zero256, sig256Z, sig256Z ); - } - } else { - softfloat_sub256M( sig256Z, sig256C, sig256Z ); - if ( 1 < expDiff ) { - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - if ( ! (sigZ.v64 & UINT64_C( 0x0100000000000000 )) ) { - --expZ; - shiftDist = 7; - } - goto sigZ; - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sigZ.v64 = sig256Z[indexWord( 4, 3 )]; - sigZ.v0 = sig256Z[indexWord( 4, 2 )]; - sigZExtra = sig256Z[indexWord( 4, 1 )]; - sig256Z0 = sig256Z[indexWord( 4, 0 )]; - if ( sigZ.v64 ) { - if ( sig256Z0 ) sigZExtra |= 1; - } else { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = sigZExtra; - sigZExtra = sig256Z0; - if ( ! sigZ.v64 ) { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = sigZExtra; - sigZExtra = 0; - if ( ! sigZ.v64 ) { - expZ -= 64; - sigZ.v64 = sigZ.v0; - sigZ.v0 = 0; - } - } - } - shiftDist = softfloat_countLeadingZeros64( sigZ.v64 ); - expZ += 7 - shiftDist; - shiftDist = 15 - shiftDist; - if ( 0 < shiftDist ) goto shiftRightRoundPack; - if ( shiftDist ) { - shiftDist = -shiftDist; - sigZ = softfloat_shortShiftLeft128( sigZ.v64, sigZ.v0, shiftDist ); - x128 = softfloat_shortShiftLeft128( 0, sigZExtra, shiftDist ); - sigZ.v0 |= x128.v64; - sigZExtra = x128.v0; - } - goto roundPack; - } - sigZ: - sigZExtra = sig256Z[indexWord( 4, 1 )] | sig256Z[indexWord( 4, 0 )]; - shiftRightRoundPack: - sigZExtra = (uint64_t) (sigZ.v0<<(64 - shiftDist)) | (sigZExtra != 0); - sigZ = softfloat_shortShiftRight128( sigZ.v64, sigZ.v0, shiftDist ); - roundPack: - return - softfloat_roundPackToF128( - signZ, expZ - 1, sigZ.v64, sigZ.v0, sigZExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ.v64 = packToF128UI64( signZ, 0x7FFF, 0 ); - uiZ.v0 = 0; - if ( expC != 0x7FFF ) goto uiZ; - if ( sigC.v64 | sigC.v0 ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF128UI( uiZ.v64, uiZ.v0, uiC64, uiC0 ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ.v64 = uiC64; - uiZ.v0 = uiC0; - if ( ! (expC | sigC.v64 | sigC.v0) && (signZ != signC) ) { - completeCancellation: - uiZ.v64 = - packToF128UI64( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ.v0 = 0; - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_mulAddF128M.c b/addins/SoftFloat-3e/source/s_mulAddF128M.c deleted file mode 100644 index f51fc71d2..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF128M.c +++ /dev/null @@ -1,382 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -void - softfloat_mulAddF128M( - const uint32_t *aWPtr, - const uint32_t *bWPtr, - const uint32_t *cWPtr, - uint32_t *zWPtr, - uint_fast8_t op - ) -{ - uint32_t uiA96; - int32_t expA; - uint32_t uiB96; - int32_t expB; - uint32_t uiC96; - bool signC; - int32_t expC; - bool signProd, prodIsInfinite; - uint32_t *ptr, uiZ96, sigA[4]; - uint_fast8_t shiftDist; - uint32_t sigX[5]; - int32_t expProd; - uint32_t sigProd[8], wordSig; - bool doSub; - uint_fast8_t - (*addCarryMRoutinePtr)( - uint_fast8_t, - const uint32_t *, - const uint32_t *, - uint_fast8_t, - uint32_t * - ); - int32_t expDiff; - bool signZ; - int32_t expZ; - uint32_t *extSigPtr; - uint_fast8_t carry; - void (*roundPackRoutinePtr)( bool, int32_t, uint32_t *, uint32_t * ); - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uiA96 = aWPtr[indexWordHi( 4 )]; - expA = expF128UI96( uiA96 ); - uiB96 = bWPtr[indexWordHi( 4 )]; - expB = expF128UI96( uiB96 ); - uiC96 = cWPtr[indexWordHi( 4 )]; - signC = signF128UI96( uiC96 ) ^ (op == softfloat_mulAdd_subC); - expC = expF128UI96( uiC96 ); - signProd = - signF128UI96( uiA96 ) ^ signF128UI96( uiB96 ) - ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - prodIsInfinite = false; - if ( (expA == 0x7FFF) || (expB == 0x7FFF) ) { - if ( softfloat_tryPropagateNaNF128M( aWPtr, bWPtr, zWPtr ) ) { - goto propagateNaN_ZC; - } - ptr = (uint32_t *) aWPtr; - if ( ! (uint32_t) (uiA96<<1) ) goto possibleInvalidProd; - if ( ! (uint32_t) (uiB96<<1) ) { - ptr = (uint32_t *) bWPtr; - possibleInvalidProd: - if ( - ! (ptr[indexWord( 4, 2 )] | ptr[indexWord( 4, 1 )] - | ptr[indexWord( 4, 0 )]) - ) { - goto invalid; - } - } - prodIsInfinite = true; - } - if ( expC == 0x7FFF ) { - if ( - fracF128UI96( uiC96 ) - || (cWPtr[indexWord( 4, 2 )] | cWPtr[indexWord( 4, 1 )] - | cWPtr[indexWord( 4, 0 )]) - ) { - zWPtr[indexWordHi( 4 )] = 0; - goto propagateNaN_ZC; - } - if ( prodIsInfinite && (signProd != signC) ) goto invalid; - goto copyC; - } - if ( prodIsInfinite ) { - uiZ96 = packToF128UI96( signProd, 0x7FFF, 0 ); - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA ) { - sigA[indexWordHi( 4 )] = fracF128UI96( uiA96 ) | 0x00010000; - sigA[indexWord( 4, 2 )] = aWPtr[indexWord( 4, 2 )]; - sigA[indexWord( 4, 1 )] = aWPtr[indexWord( 4, 1 )]; - sigA[indexWord( 4, 0 )] = aWPtr[indexWord( 4, 0 )]; - } else { - expA = softfloat_shiftNormSigF128M( aWPtr, 0, sigA ); - if ( expA == -128 ) goto zeroProd; - } - if ( expB ) { - sigX[indexWordHi( 4 )] = fracF128UI96( uiB96 ) | 0x00010000; - sigX[indexWord( 4, 2 )] = bWPtr[indexWord( 4, 2 )]; - sigX[indexWord( 4, 1 )] = bWPtr[indexWord( 4, 1 )]; - sigX[indexWord( 4, 0 )] = bWPtr[indexWord( 4, 0 )]; - } else { - expB = softfloat_shiftNormSigF128M( bWPtr, 0, sigX ); - if ( expB == -128 ) goto zeroProd; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0x3FF0; - softfloat_mul128MTo256M( sigA, sigX, sigProd ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - wordSig = fracF128UI96( uiC96 ); - if ( expC ) { - --expC; - wordSig |= 0x00010000; - } - sigX[indexWordHi( 5 )] = wordSig; - sigX[indexWord( 5, 3 )] = cWPtr[indexWord( 4, 2 )]; - sigX[indexWord( 5, 2 )] = cWPtr[indexWord( 4, 1 )]; - sigX[indexWord( 5, 1 )] = cWPtr[indexWord( 4, 0 )]; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - doSub = (signProd != signC); - addCarryMRoutinePtr = - doSub ? softfloat_addComplCarryM : softfloat_addCarryM; - expDiff = expProd - expC; - if ( expDiff <= 0 ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signC; - expZ = expC; - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - if ( expDiff ) { - softfloat_shiftRightJam160M( extSigPtr, -expDiff, extSigPtr ); - } - carry = 0; - if ( doSub ) { - wordSig = extSigPtr[indexWordLo( 5 )]; - extSigPtr[indexWordLo( 5 )] = -wordSig; - carry = ! wordSig; - } - (*addCarryMRoutinePtr)( - 4, - &sigX[indexMultiwordHi( 5, 4 )], - extSigPtr + indexMultiwordHi( 5, 4 ), - carry, - extSigPtr + indexMultiwordHi( 5, 4 ) - ); - wordSig = extSigPtr[indexWordHi( 5 )]; - if ( ! expZ ) { - if ( wordSig & 0x80000000 ) { - signZ = ! signZ; - softfloat_negX160M( extSigPtr ); - wordSig = extSigPtr[indexWordHi( 5 )]; - } - goto checkCancellation; - } - if ( wordSig < 0x00010000 ) { - --expZ; - softfloat_add160M( extSigPtr, extSigPtr, extSigPtr ); - goto roundPack; - } - goto extSigReady_noCancellation; - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - signZ = signProd; - expZ = expProd; - sigX[indexWordLo( 5 )] = 0; - expDiff -= 128; - if ( 0 <= expDiff ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - if ( expDiff ) softfloat_shiftRightJam160M( sigX, expDiff, sigX ); - wordSig = sigX[indexWordLo( 5 )]; - carry = 0; - if ( doSub ) { - carry = ! wordSig; - wordSig = -wordSig; - } - carry = - (*addCarryMRoutinePtr)( - 4, - &sigProd[indexMultiwordLo( 8, 4 )], - &sigX[indexMultiwordHi( 5, 4 )], - carry, - &sigProd[indexMultiwordLo( 8, 4 )] - ); - sigProd[indexWord( 8, 2 )] |= wordSig; - ptr = &sigProd[indexWord( 8, 4 )]; - } else { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - shiftDist = expDiff & 31; - if ( shiftDist ) { - softfloat_shortShiftRight160M( sigX, shiftDist, sigX ); - } - expDiff >>= 5; - extSigPtr = - &sigProd[indexMultiwordLo( 8, 5 )] - wordIncr - + expDiff * -wordIncr; - carry = - (*addCarryMRoutinePtr)( 5, extSigPtr, sigX, doSub, extSigPtr ); - if ( expDiff == -4 ) { - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - wordSig = sigProd[indexWordHi( 8 )]; - if ( wordSig & 0x80000000 ) { - signZ = ! signZ; - softfloat_negX256M( sigProd ); - wordSig = sigProd[indexWordHi( 8 )]; - } - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - if ( wordSig ) goto expProdBigger_noWordShift; - wordSig = sigProd[indexWord( 8, 6 )]; - if ( 0x00040000 <= wordSig ) goto expProdBigger_noWordShift; - expZ -= 32; - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )] - wordIncr; - for (;;) { - if ( wordSig ) break; - wordSig = extSigPtr[indexWord( 5, 3 )]; - if ( 0x00040000 <= wordSig ) break; - expZ -= 32; - extSigPtr -= wordIncr; - if ( extSigPtr == &sigProd[indexMultiwordLo( 8, 5 )] ) { - goto checkCancellation; - } - } - /*------------------------------------------------------------ - *------------------------------------------------------------*/ - ptr = extSigPtr + indexWordLo( 5 ); - do { - ptr -= wordIncr; - if ( *ptr ) { - extSigPtr[indexWordLo( 5 )] |= 1; - break; - } - } while ( ptr != &sigProd[indexWordLo( 8 )] ); - wordSig = extSigPtr[indexWordHi( 5 )]; - goto extSigReady; - } - ptr = extSigPtr + indexWordHi( 5 ) + wordIncr; - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( carry != doSub ) { - if ( doSub ) { - do { - wordSig = *ptr; - *ptr = wordSig - 1; - ptr += wordIncr; - } while ( ! wordSig ); - } else { - do { - wordSig = *ptr + 1; - *ptr = wordSig; - ptr += wordIncr; - } while ( ! wordSig ); - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - expProdBigger_noWordShift: - if ( - sigProd[indexWord( 8, 2 )] - || (sigProd[indexWord( 8, 1 )] | sigProd[indexWord( 8, 0 )]) - ) { - sigProd[indexWord( 8, 3 )] |= 1; - } - extSigPtr = &sigProd[indexMultiwordHi( 8, 5 )]; - wordSig = extSigPtr[indexWordHi( 5 )]; - } - extSigReady: - roundPackRoutinePtr = softfloat_normRoundPackMToF128M; - if ( wordSig < 0x00010000 ) goto doRoundPack; - extSigReady_noCancellation: - if ( 0x00020000 <= wordSig ) { - ++expZ; - softfloat_shortShiftRightJam160M( extSigPtr, 1, extSigPtr ); - } - roundPack: - roundPackRoutinePtr = softfloat_roundPackMToF128M; - doRoundPack: - (*roundPackRoutinePtr)( signZ, expZ, extSigPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_invalidF128M( zWPtr ); - propagateNaN_ZC: - softfloat_propagateNaNF128M( zWPtr, cWPtr, zWPtr ); - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - if ( - ! (uint32_t) (uiC96<<1) && (signProd != signC) - && ! cWPtr[indexWord( 4, 2 )] - && ! (cWPtr[indexWord( 4, 1 )] | cWPtr[indexWord( 4, 0 )]) - ) { - goto completeCancellation; - } - copyC: - zWPtr[indexWordHi( 4 )] = uiC96; - zWPtr[indexWord( 4, 2 )] = cWPtr[indexWord( 4, 2 )]; - zWPtr[indexWord( 4, 1 )] = cWPtr[indexWord( 4, 1 )]; - zWPtr[indexWord( 4, 0 )] = cWPtr[indexWord( 4, 0 )]; - return; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - checkCancellation: - if ( - wordSig - || (extSigPtr[indexWord( 5, 3 )] | extSigPtr[indexWord( 5, 2 )]) - || (extSigPtr[indexWord( 5, 1 )] | extSigPtr[indexWord( 5, 0 )]) - ) { - goto extSigReady; - } - completeCancellation: - uiZ96 = - packToF128UI96( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ: - zWPtr[indexWordHi( 4 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - diff --git a/addins/SoftFloat-3e/source/s_mulAddF16.c b/addins/SoftFloat-3e/source/s_mulAddF16.c deleted file mode 100644 index 3a684ac32..000000000 --- a/addins/SoftFloat-3e/source/s_mulAddF16.c +++ /dev/null @@ -1,226 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t - softfloat_mulAddF16( - uint_fast16_t uiA, uint_fast16_t uiB, uint_fast16_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast8_t expA; - uint_fast16_t sigA; - bool signB; - int_fast8_t expB; - uint_fast16_t sigB; - bool signC; - int_fast8_t expC; - uint_fast16_t sigC; - bool signProd; - uint_fast16_t magBits, uiZ; - struct exp8_sig16 normExpSig; - int_fast8_t expProd; - uint_fast32_t sigProd; - bool signZ; - int_fast8_t expZ; - uint_fast16_t sigZ; - int_fast8_t expDiff; - uint_fast32_t sig32Z, sig32C; - int_fast8_t shiftDist; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF16UI( uiA ); - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - signB = signF16UI( uiB ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - signC = signF16UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF16UI( uiC ); - sigC = fracF16UI( uiC ); - signProd = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA || ((expB == 0x1F) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x1F ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x1F ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF16Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF16Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0xE; - sigA = (sigA | 0x0400)<<4; - sigB = (sigB | 0x0400)<<4; - sigProd = (uint_fast32_t) sigA * sigB; - if ( sigProd < 0x20000000 ) { - --expProd; - sigProd <<= 1; - } - signZ = signProd; - if ( ! expC ) { - if ( ! sigC ) { - expZ = expProd - 1; - sigZ = sigProd>>15 | ((sigProd & 0x7FFF) != 0); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF16Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | 0x0400)<<3; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expProd - expC; - if ( signProd == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - expZ = expC; - sigZ = sigC + softfloat_shiftRightJam32( sigProd, 16 - expDiff ); - } else { - expZ = expProd; - sig32Z = - sigProd - + softfloat_shiftRightJam32( - (uint_fast32_t) sigC<<16, expDiff ); - sigZ = sig32Z>>16 | ((sig32Z & 0xFFFF) != 0 ); - } - if ( sigZ < 0x4000 ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig32C = (uint_fast32_t) sigC<<16; - if ( expDiff < 0 ) { - signZ = signC; - expZ = expC; - sig32Z = sig32C - softfloat_shiftRightJam32( sigProd, -expDiff ); - } else if ( ! expDiff ) { - expZ = expProd; - sig32Z = sigProd - sig32C; - if ( ! sig32Z ) goto completeCancellation; - if ( sig32Z & 0x80000000 ) { - signZ = ! signZ; - sig32Z = -sig32Z; - } - } else { - expZ = expProd; - sig32Z = sigProd - softfloat_shiftRightJam32( sig32C, expDiff ); - } - shiftDist = softfloat_countLeadingZeros32( sig32Z ) - 1; - expZ -= shiftDist; - shiftDist -= 16; - if ( shiftDist < 0 ) { - sigZ = - sig32Z>>(-shiftDist) - | ((uint32_t) (sig32Z<<(shiftDist & 31)) != 0); - } else { - sigZ = (uint_fast16_t) sig32Z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t - softfloat_mulAddF32( - uint_fast32_t uiA, uint_fast32_t uiB, uint_fast32_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint_fast32_t sigA; - bool signB; - int_fast16_t expB; - uint_fast32_t sigB; - bool signC; - int_fast16_t expC; - uint_fast32_t sigC; - bool signProd; - uint_fast32_t magBits, uiZ; - struct exp16_sig32 normExpSig; - int_fast16_t expProd; - uint_fast64_t sigProd; - bool signZ; - int_fast16_t expZ; - uint_fast32_t sigZ; - int_fast16_t expDiff; - uint_fast64_t sig64Z, sig64C; - int_fast8_t shiftDist; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF32UI( uiA ); - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - signB = signF32UI( uiB ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - signC = signF32UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF32UI( uiC ); - sigC = fracF32UI( uiC ); - signProd = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA || ((expB == 0xFF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0xFF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0xFF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF32Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF32Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expProd = expA + expB - 0x7E; - sigA = (sigA | 0x00800000)<<7; - sigB = (sigB | 0x00800000)<<7; - sigProd = (uint_fast64_t) sigA * sigB; - if ( sigProd < UINT64_C( 0x2000000000000000 ) ) { - --expProd; - sigProd <<= 1; - } - signZ = signProd; - if ( ! expC ) { - if ( ! sigC ) { - expZ = expProd - 1; - sigZ = softfloat_shortShiftRightJam64( sigProd, 31 ); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF32Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | 0x00800000)<<6; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expProd - expC; - if ( signProd == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - expZ = expC; - sigZ = sigC + softfloat_shiftRightJam64( sigProd, 32 - expDiff ); - } else { - expZ = expProd; - sig64Z = - sigProd - + softfloat_shiftRightJam64( - (uint_fast64_t) sigC<<32, expDiff ); - sigZ = softfloat_shortShiftRightJam64( sig64Z, 32 ); - } - if ( sigZ < 0x40000000 ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - sig64C = (uint_fast64_t) sigC<<32; - if ( expDiff < 0 ) { - signZ = signC; - expZ = expC; - sig64Z = sig64C - softfloat_shiftRightJam64( sigProd, -expDiff ); - } else if ( ! expDiff ) { - expZ = expProd; - sig64Z = sigProd - sig64C; - if ( ! sig64Z ) goto completeCancellation; - if ( sig64Z & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - sig64Z = -sig64Z; - } - } else { - expZ = expProd; - sig64Z = sigProd - softfloat_shiftRightJam64( sig64C, expDiff ); - } - shiftDist = softfloat_countLeadingZeros64( sig64Z ) - 1; - expZ -= shiftDist; - shiftDist -= 32; - if ( shiftDist < 0 ) { - sigZ = softfloat_shortShiftRightJam64( sig64Z, -shiftDist ); - } else { - sigZ = (uint_fast32_t) sig64Z< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -float64_t - softfloat_mulAddF64( - uint_fast64_t uiA, uint_fast64_t uiB, uint_fast64_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint_fast64_t sigA; - bool signB; - int_fast16_t expB; - uint_fast64_t sigB; - bool signC; - int_fast16_t expC; - uint_fast64_t sigC; - bool signZ; - uint_fast64_t magBits, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - struct uint128 sig128Z; - uint_fast64_t sigZ; - int_fast16_t expDiff; - struct uint128 sig128C; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signC = signF64UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF64UI( uiC ); - sigC = fracF64UI( uiC ); - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x7FF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FE; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<10; - sig128Z = softfloat_mul64To128( sigA, sigB ); - if ( sig128Z.v64 < UINT64_C( 0x2000000000000000 ) ) { - --expZ; - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128Z.v64, sig128Z.v0 ); - } - if ( ! expC ) { - if ( ! sigC ) { - --expZ; - sigZ = sig128Z.v64<<1 | (sig128Z.v0 != 0); - goto roundPack; - } - normExpSig = softfloat_normSubnormalF64Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | UINT64_C( 0x0010000000000000 ))<<9; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - sig128Z.v64 = softfloat_shiftRightJam64( sig128Z.v64, -expDiff ); - } else { - sig128Z = - softfloat_shortShiftRightJam128( sig128Z.v64, sig128Z.v0, 1 ); - } - } else if ( expDiff ) { - sig128C = softfloat_shiftRightJam128( sigC, 0, expDiff ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ = (sigC + sig128Z.v64) | (sig128Z.v0 != 0); - } else { - sig128Z = - softfloat_add128( - sig128Z.v64, sig128Z.v0, sig128C.v64, sig128C.v0 ); - sigZ = sig128Z.v64 | (sig128Z.v0 != 0); - } - if ( sigZ < UINT64_C( 0x4000000000000000 ) ) { - --expZ; - sigZ <<= 1; - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - sig128Z = softfloat_sub128( sigC, 0, sig128Z.v64, sig128Z.v0 ); - } else if ( ! expDiff ) { - sig128Z.v64 = sig128Z.v64 - sigC; - if ( ! (sig128Z.v64 | sig128Z.v0) ) goto completeCancellation; - if ( sig128Z.v64 & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - sig128Z = softfloat_sub128( 0, 0, sig128Z.v64, sig128Z.v0 ); - } - } else { - sig128Z = - softfloat_sub128( - sig128Z.v64, sig128Z.v0, sig128C.v64, sig128C.v0 ); - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( ! sig128Z.v64 ) { - expZ -= 64; - sig128Z.v64 = sig128Z.v0; - sig128Z.v0 = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig128Z.v64 ) - 1; - expZ -= shiftDist; - if ( shiftDist < 0 ) { - sigZ = softfloat_shortShiftRightJam64( sig128Z.v64, -shiftDist ); - } else { - sig128Z = - softfloat_shortShiftLeft128( - sig128Z.v64, sig128Z.v0, shiftDist ); - sigZ = sig128Z.v64; - } - sigZ |= (sig128Z.v0 != 0); - } - roundPack: - return softfloat_roundPackToF64( signZ, expZ, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - if ( expC != 0x7FF ) goto uiZ; - if ( sigC ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF64UI( uiZ, uiC ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ = uiC; - if ( ! (expC | sigC) && (signZ != signC) ) { - completeCancellation: - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#else - -float64_t - softfloat_mulAddF64( - uint_fast64_t uiA, uint_fast64_t uiB, uint_fast64_t uiC, uint_fast8_t op ) -{ - bool signA; - int_fast16_t expA; - uint64_t sigA; - bool signB; - int_fast16_t expB; - uint64_t sigB; - bool signC; - int_fast16_t expC; - uint64_t sigC; - bool signZ; - uint64_t magBits, uiZ; - struct exp16_sig64 normExpSig; - int_fast16_t expZ; - uint32_t sig128Z[4]; - uint64_t sigZ; - int_fast16_t shiftDist, expDiff; - uint32_t sig128C[4]; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - signA = signF64UI( uiA ); - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - signB = signF64UI( uiB ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - signC = signF64UI( uiC ) ^ (op == softfloat_mulAdd_subC); - expC = expF64UI( uiC ); - sigC = fracF64UI( uiC ); - signZ = signA ^ signB ^ (op == softfloat_mulAdd_subProd); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA || ((expB == 0x7FF) && sigB) ) goto propagateNaN_ABC; - magBits = expB | sigB; - goto infProdArg; - } - if ( expB == 0x7FF ) { - if ( sigB ) goto propagateNaN_ABC; - magBits = expA | sigA; - goto infProdArg; - } - if ( expC == 0x7FF ) { - if ( sigC ) { - uiZ = 0; - goto propagateNaN_ZC; - } - uiZ = uiC; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( ! expA ) { - if ( ! sigA ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigA ); - expA = normExpSig.exp; - sigA = normExpSig.sig; - } - if ( ! expB ) { - if ( ! sigB ) goto zeroProd; - normExpSig = softfloat_normSubnormalF64Sig( sigB ); - expB = normExpSig.exp; - sigB = normExpSig.sig; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA + expB - 0x3FE; - sigA = (sigA | UINT64_C( 0x0010000000000000 ))<<10; - sigB = (sigB | UINT64_C( 0x0010000000000000 ))<<11; - softfloat_mul64To128M( sigA, sigB, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 | sig128Z[indexWord( 4, 2 )]; - shiftDist = 0; - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - shiftDist = -1; - } - if ( ! expC ) { - if ( ! sigC ) { - if ( shiftDist ) sigZ <<= 1; - goto sigZ; - } - normExpSig = softfloat_normSubnormalF64Sig( sigC ); - expC = normExpSig.exp; - sigC = normExpSig.sig; - } - sigC = (sigC | UINT64_C( 0x0010000000000000 ))<<10; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expZ - expC; - if ( expDiff < 0 ) { - expZ = expC; - if ( (signZ == signC) || (expDiff < -1) ) { - shiftDist -= expDiff; - if ( shiftDist) { - sigZ = softfloat_shiftRightJam64( sigZ, shiftDist ); - } - } else { - if ( ! shiftDist ) { - softfloat_shortShiftRight128M( sig128Z, 1, sig128Z ); - } - } - } else { - if ( shiftDist ) softfloat_add128M( sig128Z, sig128Z, sig128Z ); - if ( ! expDiff ) { - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } else { - sig128C[indexWord( 4, 3 )] = sigC>>32; - sig128C[indexWord( 4, 2 )] = sigC; - sig128C[indexWord( 4, 1 )] = 0; - sig128C[indexWord( 4, 0 )] = 0; - softfloat_shiftRightJam128M( sig128C, expDiff, sig128C ); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( signZ == signC ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff <= 0 ) { - sigZ += sigC; - } else { - softfloat_add128M( sig128Z, sig128C, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) { - ++expZ; - sigZ = softfloat_shortShiftRightJam64( sigZ, 1 ); - } - } else { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expDiff < 0 ) { - signZ = signC; - if ( expDiff < -1 ) { - sigZ = sigC - sigZ; - if ( - sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] - ) { - sigZ = (sigZ - 1) | 1; - } - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - sigZ <<= 1; - } - goto roundPack; - } else { - sig128C[indexWord( 4, 3 )] = sigC>>32; - sig128C[indexWord( 4, 2 )] = sigC; - sig128C[indexWord( 4, 1 )] = 0; - sig128C[indexWord( 4, 0 )] = 0; - softfloat_sub128M( sig128C, sig128Z, sig128Z ); - } - } else if ( ! expDiff ) { - sigZ -= sigC; - if ( - ! sigZ && ! sig128Z[indexWord( 4, 1 )] - && ! sig128Z[indexWord( 4, 0 )] - ) { - goto completeCancellation; - } - sig128Z[indexWord( 4, 3 )] = sigZ>>32; - sig128Z[indexWord( 4, 2 )] = sigZ; - if ( sigZ & UINT64_C( 0x8000000000000000 ) ) { - signZ = ! signZ; - softfloat_negX128M( sig128Z ); - } - } else { - softfloat_sub128M( sig128Z, sig128C, sig128Z ); - if ( 1 < expDiff ) { - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - if ( ! (sigZ & UINT64_C( 0x4000000000000000 )) ) { - --expZ; - sigZ <<= 1; - } - goto sigZ; - } - } - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - shiftDist = 0; - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - if ( ! sigZ ) { - shiftDist = 64; - sigZ = - (uint64_t) sig128Z[indexWord( 4, 1 )]<<32 - | sig128Z[indexWord( 4, 0 )]; - } - shiftDist += softfloat_countLeadingZeros64( sigZ ) - 1; - if ( shiftDist ) { - expZ -= shiftDist; - softfloat_shiftLeft128M( sig128Z, shiftDist, sig128Z ); - sigZ = - (uint64_t) sig128Z[indexWord( 4, 3 )]<<32 - | sig128Z[indexWord( 4, 2 )]; - } - } - sigZ: - if ( sig128Z[indexWord( 4, 1 )] || sig128Z[indexWord( 4, 0 )] ) sigZ |= 1; - roundPack: - return softfloat_roundPackToF64( signZ, expZ - 1, sigZ ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN_ABC: - uiZ = softfloat_propagateNaNF64UI( uiA, uiB ); - goto propagateNaN_ZC; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - infProdArg: - if ( magBits ) { - uiZ = packToF64UI( signZ, 0x7FF, 0 ); - if ( expC != 0x7FF ) goto uiZ; - if ( sigC ) goto propagateNaN_ZC; - if ( signZ == signC ) goto uiZ; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - propagateNaN_ZC: - uiZ = softfloat_propagateNaNF64UI( uiZ, uiC ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - zeroProd: - uiZ = uiC; - if ( ! (expC | sigC) && (signZ != signC) ) { - completeCancellation: - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - } - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_negXM.c b/addins/SoftFloat-3e/source/s_negXM.c deleted file mode 100644 index ec8c92886..000000000 --- a/addins/SoftFloat-3e/source/s_negXM.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_negXM - -void softfloat_negXM( uint_fast8_t size_words, uint32_t *zPtr ) -{ - unsigned int index, lastIndex; - uint_fast8_t carry; - uint32_t word; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - carry = 1; - for (;;) { - word = ~zPtr[index] + carry; - zPtr[index] = word; - if ( index == lastIndex ) break; - index += wordIncr; - if ( word ) carry = 0; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_normExtF80SigM.c b/addins/SoftFloat-3e/source/s_normExtF80SigM.c deleted file mode 100644 index acc54dc63..000000000 --- a/addins/SoftFloat-3e/source/s_normExtF80SigM.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" - -int softfloat_normExtF80SigM( uint64_t *sigPtr ) -{ - uint64_t sig; - int_fast8_t shiftDist; - - sig = *sigPtr; - shiftDist = softfloat_countLeadingZeros64( sig ); - *sigPtr = sig< -#include -#include "platform.h" -#include "internals.h" - -void - softfloat_normRoundPackMToExtF80M( - bool sign, - int32_t exp, - uint32_t *extSigPtr, - uint_fast8_t roundingPrecision, - struct extFloat80M *zSPtr - ) -{ - int_fast16_t shiftDist; - uint32_t wordSig; - - shiftDist = 0; - wordSig = extSigPtr[indexWord( 3, 2 )]; - if ( ! wordSig ) { - shiftDist = 32; - wordSig = extSigPtr[indexWord( 3, 1 )]; - if ( ! wordSig ) { - shiftDist = 64; - wordSig = extSigPtr[indexWord( 3, 0 )]; - if ( ! wordSig ) { - zSPtr->signExp = packToExtF80UI64( sign, 0 ); - zSPtr->signif = 0; - return; - } - } - } - shiftDist += softfloat_countLeadingZeros32( wordSig ); - if ( shiftDist ) { - exp -= shiftDist; - softfloat_shiftLeft96M( extSigPtr, shiftDist, extSigPtr ); - } - softfloat_roundPackMToExtF80M( - sign, exp, extSigPtr, roundingPrecision, zSPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c b/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c deleted file mode 100644 index 309455998..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackMToF128M.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" - -void - softfloat_normRoundPackMToF128M( - bool sign, int32_t exp, uint32_t *extSigPtr, uint32_t *zWPtr ) -{ - const uint32_t *ptr; - int_fast16_t shiftDist; - uint32_t wordSig; - - ptr = extSigPtr + indexWordHi( 5 ); - shiftDist = 0; - for (;;) { - wordSig = *ptr; - if ( wordSig ) break; - shiftDist += 32; - if ( 160 <= shiftDist ) { - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, 0, 0 ); - zWPtr[indexWord( 4, 2 )] = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - return; - } - ptr -= wordIncr; - } - shiftDist += softfloat_countLeadingZeros32( wordSig ) - 15; - if ( shiftDist ) { - exp -= shiftDist; - softfloat_shiftLeft160M( extSigPtr, shiftDist, extSigPtr ); - } - softfloat_roundPackMToF128M( sign, exp, extSigPtr, zWPtr ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c b/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c deleted file mode 100644 index 76e791d91..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToExtF80.c +++ /dev/null @@ -1,71 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" - -extFloat80_t - softfloat_normRoundPackToExtF80( - bool sign, - int_fast32_t exp, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingPrecision - ) -{ - int_fast8_t shiftDist; - struct uint128 sig128; - - if ( ! sig ) { - exp -= 64; - sig = sigExtra; - sigExtra = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig ); - exp -= shiftDist; - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig, sigExtra, shiftDist ); - sig = sig128.v64; - sigExtra = sig128.v0; - } - return - softfloat_roundPackToExtF80( - sign, exp, sig, sigExtra, roundingPrecision ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToF128.c b/addins/SoftFloat-3e/source/s_normRoundPackToF128.c deleted file mode 100644 index 67f5b4349..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToF128.c +++ /dev/null @@ -1,81 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" - -float128_t - softfloat_normRoundPackToF128( - bool sign, int_fast32_t exp, uint_fast64_t sig64, uint_fast64_t sig0 ) -{ - int_fast8_t shiftDist; - struct uint128 sig128; - union ui128_f128 uZ; - uint_fast64_t sigExtra; - struct uint128_extra sig128Extra; - - if ( ! sig64 ) { - exp -= 64; - sig64 = sig0; - sig0 = 0; - } - shiftDist = softfloat_countLeadingZeros64( sig64 ) - 15; - exp -= shiftDist; - if ( 0 <= shiftDist ) { - if ( shiftDist ) { - sig128 = softfloat_shortShiftLeft128( sig64, sig0, shiftDist ); - sig64 = sig128.v64; - sig0 = sig128.v0; - } - if ( (uint32_t) exp < 0x7FFD ) { - uZ.ui.v64 = packToF128UI64( sign, sig64 | sig0 ? exp : 0, sig64 ); - uZ.ui.v0 = sig0; - return uZ.f; - } - sigExtra = 0; - } else { - sig128Extra = - softfloat_shortShiftRightJam128Extra( sig64, sig0, 0, -shiftDist ); - sig64 = sig128Extra.v.v64; - sig0 = sig128Extra.v.v0; - sigExtra = sig128Extra.extra; - } - return softfloat_roundPackToF128( sign, exp, sig64, sig0, sigExtra ); - -} - diff --git a/addins/SoftFloat-3e/source/s_normRoundPackToF16.c b/addins/SoftFloat-3e/source/s_normRoundPackToF16.c deleted file mode 100644 index 1d184d58b..000000000 --- a/addins/SoftFloat-3e/source/s_normRoundPackToF16.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" - -float16_t - softfloat_normRoundPackToF16( bool sign, int_fast16_t exp, uint_fast16_t sig ) -{ - int_fast8_t shiftDist; - union ui16_f16 uZ; - - shiftDist = softfloat_countLeadingZeros16( sig ) - 1; - exp -= shiftDist; - if ( (4 <= shiftDist) && ((unsigned int) exp < 0x1D) ) { - uZ.ui = packToF16UI( sign, sig ? exp : 0, sig<<(shiftDist - 4) ); - return uZ.f; - } else { - return softfloat_roundPackToF16( sign, exp, sig< -#include -#include "platform.h" -#include "internals.h" - -float32_t - softfloat_normRoundPackToF32( bool sign, int_fast16_t exp, uint_fast32_t sig ) -{ - int_fast8_t shiftDist; - union ui32_f32 uZ; - - shiftDist = softfloat_countLeadingZeros32( sig ) - 1; - exp -= shiftDist; - if ( (7 <= shiftDist) && ((unsigned int) exp < 0xFD) ) { - uZ.ui = packToF32UI( sign, sig ? exp : 0, sig<<(shiftDist - 7) ); - return uZ.f; - } else { - return softfloat_roundPackToF32( sign, exp, sig< -#include -#include "platform.h" -#include "internals.h" - -float64_t - softfloat_normRoundPackToF64( bool sign, int_fast16_t exp, uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - union ui64_f64 uZ; - - shiftDist = softfloat_countLeadingZeros64( sig ) - 1; - exp -= shiftDist; - if ( (10 <= shiftDist) && ((unsigned int) exp < 0x7FD) ) { - uZ.ui = packToF64UI( sign, sig ? exp : 0, sig<<(shiftDist - 10) ); - return uZ.f; - } else { - return softfloat_roundPackToF64( sign, exp, sig< -#include "platform.h" -#include "internals.h" - -struct exp32_sig64 softfloat_normSubnormalExtF80Sig( uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - struct exp32_sig64 z; - - shiftDist = softfloat_countLeadingZeros64( sig ); - z.exp = -shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp32_sig128 - softfloat_normSubnormalF128Sig( uint_fast64_t sig64, uint_fast64_t sig0 ) -{ - int_fast8_t shiftDist; - struct exp32_sig128 z; - - if ( ! sig64 ) { - shiftDist = softfloat_countLeadingZeros64( sig0 ) - 15; - z.exp = -63 - shiftDist; - if ( shiftDist < 0 ) { - z.sig.v64 = sig0>>-shiftDist; - z.sig.v0 = sig0<<(shiftDist & 63); - } else { - z.sig.v64 = sig0< -#include "platform.h" -#include "internals.h" - -int softfloat_normSubnormalF128SigM( uint32_t *sigPtr ) -{ - const uint32_t *ptr; - int_fast16_t shiftDist; - uint32_t wordSig; - - ptr = sigPtr + indexWordHi( 4 ); - shiftDist = 0; - for (;;) { - wordSig = *ptr; - if ( wordSig ) break; - shiftDist += 32; - if ( 128 <= shiftDist ) return 1; - ptr -= wordIncr; - } - shiftDist += softfloat_countLeadingZeros32( wordSig ) - 15; - if ( shiftDist ) softfloat_shiftLeft128M( sigPtr, shiftDist, sigPtr ); - return 1 - shiftDist; - -} - diff --git a/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c b/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c deleted file mode 100644 index bb92adfea..000000000 --- a/addins/SoftFloat-3e/source/s_normSubnormalF16Sig.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" - -struct exp8_sig16 softfloat_normSubnormalF16Sig( uint_fast16_t sig ) -{ - int_fast8_t shiftDist; - struct exp8_sig16 z; - - shiftDist = softfloat_countLeadingZeros16( sig ) - 5; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp16_sig32 softfloat_normSubnormalF32Sig( uint_fast32_t sig ) -{ - int_fast8_t shiftDist; - struct exp16_sig32 z; - - shiftDist = softfloat_countLeadingZeros32( sig ) - 8; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "internals.h" - -struct exp16_sig64 softfloat_normSubnormalF64Sig( uint_fast64_t sig ) -{ - int_fast8_t shiftDist; - struct exp16_sig64 z; - - shiftDist = softfloat_countLeadingZeros64( sig ) - 11; - z.exp = 1 - shiftDist; - z.sig = sig< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_remStepMBy32 - -void - softfloat_remStepMBy32( - uint_fast8_t size_words, - const uint32_t *remPtr, - uint_fast8_t dist, - const uint32_t *bPtr, - uint32_t q, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint64_t dwordProd; - uint32_t wordRem, wordShiftedRem, wordProd; - uint_fast8_t uNegDist, borrow; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - dwordProd = (uint64_t) bPtr[index] * q; - wordRem = remPtr[index]; - wordShiftedRem = wordRem<>(uNegDist & 31); - index += wordIncr; - dwordProd = (uint64_t) bPtr[index] * q + (dwordProd>>32); - wordRem = remPtr[index]; - wordShiftedRem |= wordRem< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - softfloat_roundMToI64( - bool sign, uint32_t *extSigPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint64_t sig; - uint32_t sigExtra; - union { uint64_t ui; int64_t i; } uZ; - int64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( 0x80000000 <= sigExtra ) goto increment; - } else { - if ( - sigExtra - && (sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max)) - ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == 0x80000000) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - uZ.ui = sign ? -sig : sig; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundMToUI64.c b/addins/SoftFloat-3e/source/s_roundMToUI64.c deleted file mode 100644 index 196f53735..000000000 --- a/addins/SoftFloat-3e/source/s_roundMToUI64.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - softfloat_roundMToUI64( - bool sign, uint32_t *extSigPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint64_t sig; - uint32_t sigExtra; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( 0x80000000 <= sigExtra ) goto increment; - } else { - if ( sign ) { - if ( !(sig | sigExtra) ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( (roundingMode == softfloat_round_max) && sigExtra ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == 0x80000000) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - } - if ( sign && sig ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sig |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sig; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c b/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c deleted file mode 100644 index 08620159f..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackMToExtF80M.c +++ /dev/null @@ -1,256 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -void - softfloat_roundPackMToExtF80M( - bool sign, - int32_t exp, - uint32_t *extSigPtr, - uint_fast8_t roundingPrecision, - struct extFloat80M *zSPtr - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint64_t sig, roundIncrement, roundMask, roundBits; - bool isTiny; - uint32_t sigExtra; - bool doIncrement; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - if ( roundingPrecision == 80 ) goto precision80; - if ( roundingPrecision == 64 ) { - roundIncrement = UINT64_C( 0x0000000000000400 ); - roundMask = UINT64_C( 0x00000000000007FF ); - } else if ( roundingPrecision == 32 ) { - roundIncrement = UINT64_C( 0x0000008000000000 ); - roundMask = UINT64_C( 0x000000FFFFFFFFFF ); - } else { - goto precision80; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( extSigPtr[indexWordLo( 3 )] ) sig |= 1; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? roundMask - : 0; - } - roundBits = sig & roundMask; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || (sig <= (uint64_t) (sig + roundIncrement)); - sig = softfloat_shiftRightJam64( sig, 1 - exp ); - roundBits = sig & roundMask; - if ( roundBits ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= roundMask + 1; - } -#endif - } - sig += roundIncrement; - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && ((uint64_t) (sig + roundIncrement) < sig)) - ) { - goto overflow; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig = (sig & ~roundMask) | (roundMask + 1); - goto packReturn; - } -#endif - } - sig += roundIncrement; - if ( sig < roundIncrement ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - precision80: - sigExtra = extSigPtr[indexWordLo( 3 )]; - doIncrement = (0x80000000 <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || ! doIncrement - || (sig < UINT64_C( 0xFFFFFFFFFFFFFFFF )); - softfloat_shiftRightJam96M( extSigPtr, 1 - exp, extSigPtr ); - exp = 0; - sig = - (uint64_t) extSigPtr[indexWord( 3, 2 )]<<32 - | extSigPtr[indexWord( 3, 1 )]; - sigExtra = extSigPtr[indexWordLo( 3 )]; - if ( sigExtra ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - doIncrement = (0x80000000 <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - if ( doIncrement ) { - ++sig; - sig &= ~(uint64_t) (! (sigExtra & 0x7FFFFFFF) & roundNearEven); - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - } - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && (sig == UINT64_C( 0xFFFFFFFFFFFFFFFF )) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - roundMask = 0; - overflow: - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - exp = 0x7FFF; - sig = UINT64_C( 0x8000000000000000 ); - } else { - exp = 0x7FFE; - sig = ~roundMask; - } - goto packReturn; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - ++sig; - if ( ! sig ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } else { - sig &= ~(uint64_t) (! (sigExtra & 0x7FFFFFFF) & roundNearEven); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - zSPtr->signExp = packToExtF80UI64( sign, exp ); - zSPtr->signif = sig; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackMToF128M.c b/addins/SoftFloat-3e/source/s_roundPackMToF128M.c deleted file mode 100644 index 22591b835..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackMToF128M.c +++ /dev/null @@ -1,178 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -void - softfloat_roundPackMToF128M( - bool sign, int32_t exp, uint32_t *extSigPtr, uint32_t *zWPtr ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint32_t sigExtra; - bool doIncrement, isTiny; - static const uint32_t maxSig[4] = - INIT_UINTM4( 0x0001FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF ); - uint32_t ui, uj; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - sigExtra = extSigPtr[indexWordLo( 5 )]; - doIncrement = (0x80000000 <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < -1) - || ! doIncrement - || (softfloat_compare128M( - extSigPtr + indexMultiwordHi( 5, 4 ), maxSig ) - < 0); - softfloat_shiftRightJam160M( extSigPtr, -exp, extSigPtr ); - exp = 0; - sigExtra = extSigPtr[indexWordLo( 5 )]; - if ( isTiny && sigExtra ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - doIncrement = (0x80000000 <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - } else if ( - (0x7FFD < exp) - || ((exp == 0x7FFD) && doIncrement - && (softfloat_compare128M( - extSigPtr + indexMultiwordHi( 5, 4 ), maxSig ) - == 0)) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - ui = packToF128UI96( sign, 0x7FFF, 0 ); - uj = 0; - } else { - ui = packToF128UI96( sign, 0x7FFE, 0x0000FFFF ); - uj = 0xFFFFFFFF; - } - zWPtr[indexWordHi( 4 )] = ui; - zWPtr[indexWord( 4, 2 )] = uj; - zWPtr[indexWord( 4, 1 )] = uj; - zWPtr[indexWord( 4, 0 )] = uj; - return; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - uj = extSigPtr[indexWord( 5, 1 )]; - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - uj |= 1; - goto noIncrementPackReturn; - } -#endif - } - if ( doIncrement ) { - ++uj; - if ( uj ) { - if ( ! (sigExtra & 0x7FFFFFFF) && roundNearEven ) uj &= ~1; - zWPtr[indexWord( 4, 2 )] = extSigPtr[indexWord( 5, 3 )]; - zWPtr[indexWord( 4, 1 )] = extSigPtr[indexWord( 5, 2 )]; - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - } else { - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWord( 5, 2 )] + 1; - zWPtr[indexWord( 4, 1 )] = ui; - uj = extSigPtr[indexWord( 5, 3 )]; - if ( ui ) { - zWPtr[indexWord( 4, 2 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - } else { - ++uj; - zWPtr[indexWord( 4, 2 )] = uj; - ui = extSigPtr[indexWordHi( 5 )]; - if ( ! uj ) ++ui; - } - } - } else { - noIncrementPackReturn: - zWPtr[indexWord( 4, 0 )] = uj; - ui = extSigPtr[indexWord( 5, 2 )]; - zWPtr[indexWord( 4, 1 )] = ui; - uj |= ui; - ui = extSigPtr[indexWord( 5, 3 )]; - zWPtr[indexWord( 4, 2 )] = ui; - uj |= ui; - ui = extSigPtr[indexWordHi( 5 )]; - uj |= ui; - if ( ! uj ) exp = 0; - } - zWPtr[indexWordHi( 4 )] = packToF128UI96( sign, exp, ui ); - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToExtF80.c b/addins/SoftFloat-3e/source/s_roundPackToExtF80.c deleted file mode 100644 index 0cc7af985..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToExtF80.c +++ /dev/null @@ -1,256 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t - softfloat_roundPackToExtF80( - bool sign, - int_fast32_t exp, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingPrecision - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast64_t roundIncrement, roundMask, roundBits; - bool isTiny, doIncrement; - struct uint64_extra sig64Extra; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - if ( roundingPrecision == 80 ) goto precision80; - if ( roundingPrecision == 64 ) { - roundIncrement = UINT64_C( 0x0000000000000400 ); - roundMask = UINT64_C( 0x00000000000007FF ); - } else if ( roundingPrecision == 32 ) { - roundIncrement = UINT64_C( 0x0000008000000000 ); - roundMask = UINT64_C( 0x000000FFFFFFFFFF ); - } else { - goto precision80; - } - sig |= (sigExtra != 0); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? roundMask - : 0; - } - roundBits = sig & roundMask; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || (sig <= (uint64_t) (sig + roundIncrement)); - sig = softfloat_shiftRightJam64( sig, 1 - exp ); - roundBits = sig & roundMask; - if ( roundBits ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= roundMask + 1; - } -#endif - } - sig += roundIncrement; - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && ((uint64_t) (sig + roundIncrement) < sig)) - ) { - goto overflow; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig = (sig & ~roundMask) | (roundMask + 1); - goto packReturn; - } -#endif - } - sig = (uint64_t) (sig + roundIncrement); - if ( sig < roundIncrement ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } - roundIncrement = roundMask + 1; - if ( roundNearEven && (roundBits<<1 == roundIncrement) ) { - roundMask |= roundIncrement; - } - sig &= ~roundMask; - goto packReturn; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - precision80: - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) (exp - 1) ) { - if ( exp <= 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < 0) - || ! doIncrement - || (sig < UINT64_C( 0xFFFFFFFFFFFFFFFF )); - sig64Extra = - softfloat_shiftRightJam64Extra( sig, sigExtra, 1 - exp ); - exp = 0; - sig = sig64Extra.v; - sigExtra = sig64Extra.extra; - if ( sigExtra ) { - if ( isTiny ) softfloat_raiseFlags( softfloat_flag_underflow ); - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - if ( doIncrement ) { - ++sig; - sig &= - ~(uint_fast64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - exp = ((sig & UINT64_C( 0x8000000000000000 )) != 0); - } - goto packReturn; - } - if ( - (0x7FFE < exp) - || ((exp == 0x7FFE) && (sig == UINT64_C( 0xFFFFFFFFFFFFFFFF )) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - roundMask = 0; - overflow: - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - exp = 0x7FFF; - sig = UINT64_C( 0x8000000000000000 ); - } else { - exp = 0x7FFE; - sig = ~roundMask; - } - goto packReturn; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - ++sig; - if ( ! sig ) { - ++exp; - sig = UINT64_C( 0x8000000000000000 ); - } else { - sig &= - ~(uint_fast64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uZ.s.signExp = packToExtF80UI64( sign, exp ); - uZ.s.signif = sig; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF128.c b/addins/SoftFloat-3e/source/s_roundPackToF128.c deleted file mode 100644 index 41584316a..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF128.c +++ /dev/null @@ -1,171 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t - softfloat_roundPackToF128( - bool sign, - int_fast32_t exp, - uint_fast64_t sig64, - uint_fast64_t sig0, - uint_fast64_t sigExtra - ) -{ - uint_fast8_t roundingMode; - bool roundNearEven, doIncrement, isTiny; - struct uint128_extra sig128Extra; - uint_fast64_t uiZ64, uiZ0; - struct uint128 sig128; - union ui128_f128 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FFD <= (uint32_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess - == softfloat_tininess_beforeRounding) - || (exp < -1) - || ! doIncrement - || softfloat_lt128( - sig64, - sig0, - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ) - ); - sig128Extra = - softfloat_shiftRightJam128Extra( sig64, sig0, sigExtra, -exp ); - sig64 = sig128Extra.v.v64; - sig0 = sig128Extra.v.v0; - sigExtra = sig128Extra.extra; - exp = 0; - if ( isTiny && sigExtra ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - doIncrement = (UINT64_C( 0x8000000000000000 ) <= sigExtra); - if ( - ! roundNearEven - && (roundingMode != softfloat_round_near_maxMag) - ) { - doIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - && sigExtra; - } - } else if ( - (0x7FFD < exp) - || ((exp == 0x7FFD) - && softfloat_eq128( - sig64, - sig0, - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ) - ) - && doIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - if ( - roundNearEven - || (roundingMode == softfloat_round_near_maxMag) - || (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ) { - uiZ64 = packToF128UI64( sign, 0x7FFF, 0 ); - uiZ0 = 0; - } else { - uiZ64 = - packToF128UI64( - sign, 0x7FFE, UINT64_C( 0x0000FFFFFFFFFFFF ) ); - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( sigExtra ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig0 |= 1; - goto packReturn; - } -#endif - } - if ( doIncrement ) { - sig128 = softfloat_add128( sig64, sig0, 0, 1 ); - sig64 = sig128.v64; - sig0 = - sig128.v0 - & ~(uint64_t) - (! (sigExtra & UINT64_C( 0x7FFFFFFFFFFFFFFF )) - & roundNearEven); - } else { - if ( ! (sig64 | sig0) ) exp = 0; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ64 = packToF128UI64( sign, exp, sig64 ); - uiZ0 = sig0; - uiZ: - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF16.c b/addins/SoftFloat-3e/source/s_roundPackToF16.c deleted file mode 100644 index 2dde55bb4..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF16.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t - softfloat_roundPackToF16( bool sign, int_fast16_t exp, uint_fast16_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast8_t roundIncrement, roundBits; - bool isTiny; - uint_fast16_t uiZ; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x8; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0xF - : 0; - } - roundBits = sig & 0xF; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x1D <= (unsigned int) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) || (sig + roundIncrement < 0x8000); - sig = softfloat_shiftRightJam32( sig, -exp ); - exp = 0; - roundBits = sig & 0xF; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( (0x1D < exp) || (0x8000 <= sig + roundIncrement) ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF16UI( sign, 0x1F, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>4; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast16_t) (! (roundBits ^ 8) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF16UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF32.c b/addins/SoftFloat-3e/source/s_roundPackToF32.c deleted file mode 100644 index a69b8d4d7..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF32.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t - softfloat_roundPackToF32( bool sign, int_fast16_t exp, uint_fast32_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast8_t roundIncrement, roundBits; - bool isTiny; - uint_fast32_t uiZ; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x40; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0x7F - : 0; - } - roundBits = sig & 0x7F; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0xFD <= (unsigned int) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) || (sig + roundIncrement < 0x80000000); - sig = softfloat_shiftRightJam32( sig, -exp ); - exp = 0; - roundBits = sig & 0x7F; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( (0xFD < exp) || (0x80000000 <= sig + roundIncrement) ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF32UI( sign, 0xFF, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>7; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast32_t) (! (roundBits ^ 0x40) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF32UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundPackToF64.c b/addins/SoftFloat-3e/source/s_roundPackToF64.c deleted file mode 100644 index f7f3abff5..000000000 --- a/addins/SoftFloat-3e/source/s_roundPackToF64.c +++ /dev/null @@ -1,117 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t - softfloat_roundPackToF64( bool sign, int_fast16_t exp, uint_fast64_t sig ) -{ - uint_fast8_t roundingMode; - bool roundNearEven; - uint_fast16_t roundIncrement, roundBits; - bool isTiny; - uint_fast64_t uiZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundingMode = softfloat_roundingMode; - roundNearEven = (roundingMode == softfloat_round_near_even); - roundIncrement = 0x200; - if ( ! roundNearEven && (roundingMode != softfloat_round_near_maxMag) ) { - roundIncrement = - (roundingMode - == (sign ? softfloat_round_min : softfloat_round_max)) - ? 0x3FF - : 0; - } - roundBits = sig & 0x3FF; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( 0x7FD <= (uint16_t) exp ) { - if ( exp < 0 ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - isTiny = - (softfloat_detectTininess == softfloat_tininess_beforeRounding) - || (exp < -1) - || (sig + roundIncrement < UINT64_C( 0x8000000000000000 )); - sig = softfloat_shiftRightJam64( sig, -exp ); - exp = 0; - roundBits = sig & 0x3FF; - if ( isTiny && roundBits ) { - softfloat_raiseFlags( softfloat_flag_underflow ); - } - } else if ( - (0x7FD < exp) - || (UINT64_C( 0x8000000000000000 ) <= sig + roundIncrement) - ) { - /*---------------------------------------------------------------- - *----------------------------------------------------------------*/ - softfloat_raiseFlags( - softfloat_flag_overflow | softfloat_flag_inexact ); - uiZ = packToF64UI( sign, 0x7FF, 0 ) - ! roundIncrement; - goto uiZ; - } - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - sig = (sig + roundIncrement)>>10; - if ( roundBits ) { - softfloat_exceptionFlags |= softfloat_flag_inexact; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) { - sig |= 1; - goto packReturn; - } -#endif - } - sig &= ~(uint_fast64_t) (! (roundBits ^ 0x200) & roundNearEven); - if ( ! sig ) exp = 0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - packReturn: - uiZ = packToF64UI( sign, exp, sig ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToI32.c b/addins/SoftFloat-3e/source/s_roundToI32.c deleted file mode 100644 index a3e727dc7..000000000 --- a/addins/SoftFloat-3e/source/s_roundToI32.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast32_t - softfloat_roundToI32( - bool sign, uint_fast64_t sig, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast16_t roundIncrement, roundBits; - uint_fast32_t sig32; - union { uint32_t ui; int32_t i; } uZ; - int_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundIncrement = 0x800; - if ( - (roundingMode != softfloat_round_near_maxMag) - && (roundingMode != softfloat_round_near_even) - ) { - roundIncrement = 0; - if ( - sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max) - ) { - roundIncrement = 0xFFF; - } - } - roundBits = sig & 0xFFF; - sig += roundIncrement; - if ( sig & UINT64_C( 0xFFFFF00000000000 ) ) goto invalid; - sig32 = sig>>12; - if ( - (roundBits == 0x800) && (roundingMode == softfloat_round_near_even) - ) { - sig32 &= ~(uint_fast32_t) 1; - } - uZ.ui = sign ? -sig32 : sig32; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( roundBits ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i32_fromNegOverflow : i32_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToI64.c b/addins/SoftFloat-3e/source/s_roundToI64.c deleted file mode 100644 index 773c82cfc..000000000 --- a/addins/SoftFloat-3e/source/s_roundToI64.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -int_fast64_t - softfloat_roundToI64( - bool sign, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingMode, - bool exact - ) -{ - union { uint64_t ui; int64_t i; } uZ; - int_fast64_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( UINT64_C( 0x8000000000000000 ) <= sigExtra ) goto increment; - } else { - if ( - sigExtra - && (sign - ? (roundingMode == softfloat_round_min) -#ifdef SOFTFLOAT_ROUND_ODD - || (roundingMode == softfloat_round_odd) -#endif - : (roundingMode == softfloat_round_max)) - ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == UINT64_C( 0x8000000000000000 )) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - uZ.ui = sign ? -sig : sig; - z = uZ.i; - if ( z && ((z < 0) ^ sign) ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? i64_fromNegOverflow : i64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToUI32.c b/addins/SoftFloat-3e/source/s_roundToUI32.c deleted file mode 100644 index 059e231e2..000000000 --- a/addins/SoftFloat-3e/source/s_roundToUI32.c +++ /dev/null @@ -1,93 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast32_t - softfloat_roundToUI32( - bool sign, uint_fast64_t sig, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast16_t roundIncrement, roundBits; - uint_fast32_t z; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - roundIncrement = 0x800; - if ( - (roundingMode != softfloat_round_near_maxMag) - && (roundingMode != softfloat_round_near_even) - ) { - roundIncrement = 0; - if ( sign ) { - if ( !sig ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( roundingMode == softfloat_round_max ) roundIncrement = 0xFFF; - } - } - roundBits = sig & 0xFFF; - sig += roundIncrement; - if ( sig & UINT64_C( 0xFFFFF00000000000 ) ) goto invalid; - z = sig>>12; - if ( - (roundBits == 0x800) && (roundingMode == softfloat_round_near_even) - ) { - z &= ~(uint_fast32_t) 1; - } - if ( sign && z ) goto invalid; - if ( roundBits ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) z |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return z; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui32_fromNegOverflow : ui32_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_roundToUI64.c b/addins/SoftFloat-3e/source/s_roundToUI64.c deleted file mode 100644 index 856ad9792..000000000 --- a/addins/SoftFloat-3e/source/s_roundToUI64.c +++ /dev/null @@ -1,97 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -uint_fast64_t - softfloat_roundToUI64( - bool sign, - uint_fast64_t sig, - uint_fast64_t sigExtra, - uint_fast8_t roundingMode, - bool exact - ) -{ - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - if ( - (roundingMode == softfloat_round_near_maxMag) - || (roundingMode == softfloat_round_near_even) - ) { - if ( UINT64_C( 0x8000000000000000 ) <= sigExtra ) goto increment; - } else { - if ( sign ) { - if ( !(sig | sigExtra) ) return 0; - if ( roundingMode == softfloat_round_min ) goto invalid; -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) goto invalid; -#endif - } else { - if ( (roundingMode == softfloat_round_max) && sigExtra ) { - increment: - ++sig; - if ( !sig ) goto invalid; - if ( - (sigExtra == UINT64_C( 0x8000000000000000 )) - && (roundingMode == softfloat_round_near_even) - ) { - sig &= ~(uint_fast64_t) 1; - } - } - } - } - if ( sign && sig ) goto invalid; - if ( sigExtra ) { -#ifdef SOFTFLOAT_ROUND_ODD - if ( roundingMode == softfloat_round_odd ) sig |= 1; -#endif - if ( exact ) softfloat_exceptionFlags |= softfloat_flag_inexact; - } - return sig; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - invalid: - softfloat_raiseFlags( softfloat_flag_invalid ); - return sign ? ui64_fromNegOverflow : ui64_fromPosOverflow; - -} - diff --git a/addins/SoftFloat-3e/source/s_shiftLeftM.c b/addins/SoftFloat-3e/source/s_shiftLeftM.c deleted file mode 100644 index 71a309919..000000000 --- a/addins/SoftFloat-3e/source/s_shiftLeftM.c +++ /dev/null @@ -1,91 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shiftLeftM - -#define softfloat_shiftLeftM softfloat_shiftLeftM -#include "primitives.h" - -void - softfloat_shiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordDist; - uint_fast8_t innerDist; - uint32_t *destPtr; - uint_fast8_t i; - - wordDist = dist>>5; - if ( wordDist < size_words ) { - aPtr += indexMultiwordLoBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftLeftM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordHiBut( size_words, wordDist ) - ); - if ( ! wordDist ) return; - } else { - aPtr += indexWordHi( size_words - wordDist ); - destPtr = zPtr + indexWordHi( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *destPtr = *aPtr; - aPtr -= wordIncr; - destPtr -= wordIncr; - } - } - zPtr += indexMultiwordLo( size_words, wordDist ); - } else { - wordDist = size_words; - } - do { - *zPtr++ = 0; - --wordDist; - } while ( wordDist ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c b/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c deleted file mode 100644 index fa4976c8e..000000000 --- a/addins/SoftFloat-3e/source/s_shiftNormSigF128M.c +++ /dev/null @@ -1,78 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" - -int - softfloat_shiftNormSigF128M( - const uint32_t *wPtr, uint_fast8_t shiftDist, uint32_t *sigPtr ) -{ - uint32_t wordSig; - int32_t exp; - uint32_t leadingBit; - - wordSig = wPtr[indexWordHi( 4 )]; - exp = expF128UI96( wordSig ); - if ( exp ) { - softfloat_shortShiftLeft128M( wPtr, shiftDist, sigPtr ); - leadingBit = 0x00010000< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam128 - -struct uint128 - softfloat_shiftRightJam128( uint64_t a64, uint64_t a0, uint_fast32_t dist ) -{ - uint_fast8_t u8NegDist; - struct uint128 z; - - if ( dist < 64 ) { - u8NegDist = -dist; - z.v64 = a64>>dist; - z.v0 = - a64<<(u8NegDist & 63) | a0>>dist - | ((uint64_t) (a0<<(u8NegDist & 63)) != 0); - } else { - z.v64 = 0; - z.v0 = - (dist < 127) - ? a64>>(dist & 63) - | (((a64 & (((uint_fast64_t) 1<<(dist & 63)) - 1)) | a0) - != 0) - : ((a64 | a0) != 0); - } - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c b/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c deleted file mode 100644 index 75722887b..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam128Extra.c +++ /dev/null @@ -1,77 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam128Extra - -struct uint128_extra - softfloat_shiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast32_t dist ) -{ - uint_fast8_t u8NegDist; - struct uint128_extra z; - - u8NegDist = -dist; - if ( dist < 64 ) { - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(u8NegDist & 63) | a0>>dist; - z.extra = a0<<(u8NegDist & 63); - } else { - z.v.v64 = 0; - if ( dist == 64 ) { - z.v.v0 = a64; - z.extra = a0; - } else { - extra |= a0; - if ( dist < 128 ) { - z.v.v0 = a64>>(dist & 63); - z.extra = a64<<(u8NegDist & 63); - } else { - z.v.v0 = 0; - z.extra = (dist == 128) ? a64 : (a64 != 0); - } - } - } - z.extra |= (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam256M.c b/addins/SoftFloat-3e/source/s_shiftRightJam256M.c deleted file mode 100644 index 433870a81..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam256M.c +++ /dev/null @@ -1,126 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam256M - -static - void - softfloat_shortShiftRightJamM( - uint_fast8_t size_words, - const uint64_t *aPtr, - uint_fast8_t dist, - uint64_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint64_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - wordA = aPtr[index]; - partWordZ = wordA>>dist; - if ( partWordZ<>dist; - } - zPtr[index] = partWordZ; - -} - -void - softfloat_shiftRightJam256M( - const uint64_t *aPtr, uint_fast32_t dist, uint64_t *zPtr ) -{ - uint64_t wordJam; - uint_fast32_t wordDist; - uint64_t *ptr; - uint_fast8_t i, innerDist; - - wordJam = 0; - wordDist = dist>>6; - if ( wordDist ) { - if ( 4 < wordDist ) wordDist = 4; - ptr = (uint64_t *) (aPtr + indexMultiwordLo( 4, wordDist )); - i = wordDist; - do { - wordJam = *ptr++; - if ( wordJam ) break; - --i; - } while ( i ); - ptr = zPtr; - } - if ( wordDist < 4 ) { - aPtr += indexMultiwordHiBut( 4, wordDist ); - innerDist = dist & 63; - if ( innerDist ) { - softfloat_shortShiftRightJamM( - 4 - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( 4, wordDist ) - ); - if ( ! wordDist ) goto wordJam; - } else { - aPtr += indexWordLo( 4 - wordDist ); - ptr = zPtr + indexWordLo( 4 ); - for ( i = 4 - wordDist; i; --i ) { - *ptr = *aPtr; - aPtr += wordIncr; - ptr += wordIncr; - } - } - ptr = zPtr + indexMultiwordHi( 4, wordDist ); - } - do { - *ptr++ = 0; - --wordDist; - } while ( wordDist ); - wordJam: - if ( wordJam ) zPtr[indexWordLo( 4 )] |= 1; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam32.c b/addins/SoftFloat-3e/source/s_shiftRightJam32.c deleted file mode 100644 index 2533fcd95..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam32.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shiftRightJam32 - -uint32_t softfloat_shiftRightJam32( uint32_t a, uint_fast16_t dist ) -{ - - return - (dist < 31) ? a>>dist | ((uint32_t) (a<<(-dist & 31)) != 0) : (a != 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam64.c b/addins/SoftFloat-3e/source/s_shiftRightJam64.c deleted file mode 100644 index 4b40e3de6..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam64.c +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shiftRightJam64 - -uint64_t softfloat_shiftRightJam64( uint64_t a, uint_fast32_t dist ) -{ - - return - (dist < 63) ? a>>dist | ((uint64_t) (a<<(-dist & 63)) != 0) : (a != 0); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c b/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c deleted file mode 100644 index b93fad39c..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJam64Extra.c +++ /dev/null @@ -1,62 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shiftRightJam64Extra - -struct uint64_extra - softfloat_shiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast32_t dist ) -{ - struct uint64_extra z; - - if ( dist < 64 ) { - z.v = a>>dist; - z.extra = a<<(-dist & 63); - } else { - z.v = 0; - z.extra = (dist == 64) ? a : (a != 0); - } - z.extra |= (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightJamM.c b/addins/SoftFloat-3e/source/s_shiftRightJamM.c deleted file mode 100644 index edf5f956b..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightJamM.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shiftRightJamM - -#define softfloat_shiftRightJamM softfloat_shiftRightJamM -#include "primitives.h" - -void - softfloat_shiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordJam, wordDist, *ptr; - uint_fast8_t i, innerDist; - - wordJam = 0; - wordDist = dist>>5; - if ( wordDist ) { - if ( size_words < wordDist ) wordDist = size_words; - ptr = (uint32_t *) (aPtr + indexMultiwordLo( size_words, wordDist )); - i = wordDist; - do { - wordJam = *ptr++; - if ( wordJam ) break; - --i; - } while ( i ); - ptr = zPtr; - } - if ( wordDist < size_words ) { - aPtr += indexMultiwordHiBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftRightJamM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( size_words, wordDist ) - ); - if ( ! wordDist ) goto wordJam; - } else { - aPtr += indexWordLo( size_words - wordDist ); - ptr = zPtr + indexWordLo( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *ptr = *aPtr; - aPtr += wordIncr; - ptr += wordIncr; - } - } - ptr = zPtr + indexMultiwordHi( size_words, wordDist ); - } - do { - *ptr++ = 0; - --wordDist; - } while ( wordDist ); - wordJam: - if ( wordJam ) zPtr[indexWordLo( size_words )] |= 1; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shiftRightM.c b/addins/SoftFloat-3e/source/s_shiftRightM.c deleted file mode 100644 index 00265ea23..000000000 --- a/addins/SoftFloat-3e/source/s_shiftRightM.c +++ /dev/null @@ -1,91 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shiftRightM - -#define softfloat_shiftRightM softfloat_shiftRightM -#include "primitives.h" - -void - softfloat_shiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint32_t dist, - uint32_t *zPtr - ) -{ - uint32_t wordDist; - uint_fast8_t innerDist; - uint32_t *destPtr; - uint_fast8_t i; - - wordDist = dist>>5; - if ( wordDist < size_words ) { - aPtr += indexMultiwordHiBut( size_words, wordDist ); - innerDist = dist & 31; - if ( innerDist ) { - softfloat_shortShiftRightM( - size_words - wordDist, - aPtr, - innerDist, - zPtr + indexMultiwordLoBut( size_words, wordDist ) - ); - if ( ! wordDist ) return; - } else { - aPtr += indexWordLo( size_words - wordDist ); - destPtr = zPtr + indexWordLo( size_words ); - for ( i = size_words - wordDist; i; --i ) { - *destPtr = *aPtr; - aPtr += wordIncr; - destPtr += wordIncr; - } - } - zPtr += indexMultiwordHi( size_words, wordDist ); - } else { - wordDist = size_words; - } - do { - *zPtr++ = 0; - --wordDist; - } while ( wordDist ); - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftLeft128.c b/addins/SoftFloat-3e/source/s_shortShiftLeft128.c deleted file mode 100644 index 7513bc627..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftLeft128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeft128 - -struct uint128 - softfloat_shortShiftLeft128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - - z.v64 = a64<>(-dist & 63); - z.v0 = a0< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeft64To96M - -void - softfloat_shortShiftLeft64To96M( - uint64_t a, uint_fast8_t dist, uint32_t *zPtr ) -{ - - zPtr[indexWord( 3, 0 )] = (uint32_t) a<>= 32 - dist; - zPtr[indexWord( 3, 2 )] = a>>32; - zPtr[indexWord( 3, 1 )] = a; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftLeftM.c b/addins/SoftFloat-3e/source/s_shortShiftLeftM.c deleted file mode 100644 index 48e6e03b5..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftLeftM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftLeftM - -void - softfloat_shortShiftLeftM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordHi( size_words ); - lastIndex = indexWordLo( size_words ); - partWordZ = aPtr[index]<>(uNegDist & 31); - index -= wordIncr; - partWordZ = wordA< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRight128 - -struct uint128 - softfloat_shortShiftRight128( uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - struct uint128 z; - - z.v64 = a64>>dist; - z.v0 = a64<<(-dist & 63) | a0>>dist; - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c b/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c deleted file mode 100644 index bc441c731..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightExtendM.c +++ /dev/null @@ -1,73 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightExtendM - -void - softfloat_shortShiftRightExtendM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int indexA, lastIndexA; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - indexA = indexWordLo( size_words ); - lastIndexA = indexWordHi( size_words ); - zPtr += indexWordLo( size_words + 1 ); - partWordZ = 0; - for (;;) { - wordA = aPtr[indexA]; - *zPtr = wordA<<(uNegDist & 31) | partWordZ; - zPtr += wordIncr; - partWordZ = wordA>>dist; - if ( indexA == lastIndexA ) break; - indexA += wordIncr; - } - *zPtr = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c deleted file mode 100644 index 76008722b..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam128.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam128 - -struct uint128 - softfloat_shortShiftRightJam128( - uint64_t a64, uint64_t a0, uint_fast8_t dist ) -{ - uint_fast8_t uNegDist; - struct uint128 z; - - uNegDist = -dist; - z.v64 = a64>>dist; - z.v0 = - a64<<(uNegDist & 63) | a0>>dist - | ((uint64_t) (a0<<(uNegDist & 63)) != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c deleted file mode 100644 index b0774401d..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam128Extra - -struct uint128_extra - softfloat_shortShiftRightJam128Extra( - uint64_t a64, uint64_t a0, uint64_t extra, uint_fast8_t dist ) -{ - uint_fast8_t uNegDist; - struct uint128_extra z; - - uNegDist = -dist; - z.v.v64 = a64>>dist; - z.v.v0 = a64<<(uNegDist & 63) | a0>>dist; - z.extra = a0<<(uNegDist & 63) | (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c b/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c deleted file mode 100644 index d3044c853..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJam64.c +++ /dev/null @@ -1,50 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" - -#ifndef softfloat_shortShiftRightJam64 - -uint64_t softfloat_shortShiftRightJam64( uint64_t a, uint_fast8_t dist ) -{ - - return a>>dist | ((a & (((uint_fast64_t) 1< -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJam64Extra - -struct uint64_extra - softfloat_shortShiftRightJam64Extra( - uint64_t a, uint64_t extra, uint_fast8_t dist ) -{ - struct uint64_extra z; - - z.v = a>>dist; - z.extra = a<<(-dist & 63) | (extra != 0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c b/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c deleted file mode 100644 index b567e482a..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightJamM.c +++ /dev/null @@ -1,72 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightJamM - -void - softfloat_shortShiftRightJamM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - wordA = aPtr[index]; - partWordZ = wordA>>dist; - if ( partWordZ<>dist; - } - zPtr[index] = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_shortShiftRightM.c b/addins/SoftFloat-3e/source/s_shortShiftRightM.c deleted file mode 100644 index 54e0071c7..000000000 --- a/addins/SoftFloat-3e/source/s_shortShiftRightM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_shortShiftRightM - -void - softfloat_shortShiftRightM( - uint_fast8_t size_words, - const uint32_t *aPtr, - uint_fast8_t dist, - uint32_t *zPtr - ) -{ - uint_fast8_t uNegDist; - unsigned int index, lastIndex; - uint32_t partWordZ, wordA; - - uNegDist = -dist; - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - partWordZ = aPtr[index]>>dist; - while ( index != lastIndex ) { - wordA = aPtr[index + wordIncr]; - zPtr[index] = wordA<<(uNegDist & 31) | partWordZ; - index += wordIncr; - partWordZ = wordA>>dist; - } - zPtr[index] = partWordZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub128.c b/addins/SoftFloat-3e/source/s_sub128.c deleted file mode 100644 index 9bf346391..000000000 --- a/addins/SoftFloat-3e/source/s_sub128.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub128 - -struct uint128 - softfloat_sub128( uint64_t a64, uint64_t a0, uint64_t b64, uint64_t b0 ) -{ - struct uint128 z; - - z.v0 = a0 - b0; - z.v64 = a64 - b64 - (a0 < b0); - return z; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub1XM.c b/addins/SoftFloat-3e/source/s_sub1XM.c deleted file mode 100644 index 30c5d36ee..000000000 --- a/addins/SoftFloat-3e/source/s_sub1XM.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub1XM - -void softfloat_sub1XM( uint_fast8_t size_words, uint32_t *zPtr ) -{ - unsigned int index, lastIndex; - uint32_t wordA; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - for (;;) { - wordA = zPtr[index]; - zPtr[index] = wordA - 1; - if ( wordA || (index == lastIndex) ) break; - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_sub256M.c b/addins/SoftFloat-3e/source/s_sub256M.c deleted file mode 100644 index a4af5a1c9..000000000 --- a/addins/SoftFloat-3e/source/s_sub256M.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_sub256M - -void - softfloat_sub256M( - const uint64_t *aPtr, const uint64_t *bPtr, uint64_t *zPtr ) -{ - unsigned int index; - uint_fast8_t borrow; - uint64_t wordA, wordB; - - index = indexWordLo( 4 ); - borrow = 0; - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - zPtr[index] = wordA - wordB - borrow; - if ( index == indexWordHi( 4 ) ) break; - borrow = borrow ? (wordA <= wordB) : (wordA < wordB); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_subM.c b/addins/SoftFloat-3e/source/s_subM.c deleted file mode 100644 index fcccc744c..000000000 --- a/addins/SoftFloat-3e/source/s_subM.c +++ /dev/null @@ -1,70 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "primitiveTypes.h" - -#ifndef softfloat_subM - -void - softfloat_subM( - uint_fast8_t size_words, - const uint32_t *aPtr, - const uint32_t *bPtr, - uint32_t *zPtr - ) -{ - unsigned int index, lastIndex; - uint_fast8_t borrow; - uint32_t wordA, wordB; - - index = indexWordLo( size_words ); - lastIndex = indexWordHi( size_words ); - borrow = 0; - for (;;) { - wordA = aPtr[index]; - wordB = bPtr[index]; - zPtr[index] = wordA - wordB - borrow; - if ( index == lastIndex ) break; - borrow = borrow ? (wordA <= wordB) : (wordA < wordB); - index += wordIncr; - } - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/s_subMagsExtF80.c b/addins/SoftFloat-3e/source/s_subMagsExtF80.c deleted file mode 100644 index 0c46c61a2..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsExtF80.c +++ /dev/null @@ -1,158 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -extFloat80_t - softfloat_subMagsExtF80( - uint_fast16_t uiA64, - uint_fast64_t uiA0, - uint_fast16_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - uint_fast64_t sigA; - int_fast32_t expB; - uint_fast64_t sigB; - int_fast32_t expDiff; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - int_fast32_t expZ; - uint_fast64_t sigExtra; - struct uint128 sig128, uiZ; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expExtF80UI64( uiA64 ); - sigA = uiA0; - expB = expExtF80UI64( uiB64 ); - sigB = uiB0; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( 0 < expDiff ) goto expABigger; - if ( expDiff < 0 ) goto expBBigger; - if ( expA == 0x7FFF ) { - if ( (sigA | sigB) & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - goto propagateNaN; - } - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ64 = defaultNaNExtF80UI64; - uiZ0 = defaultNaNExtF80UI0; - goto uiZ; - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expZ = expA; - if ( ! expZ ) expZ = 1; - sigExtra = 0; - if ( sigB < sigA ) goto aBigger; - if ( sigA < sigB ) goto bBigger; - uiZ64 = - packToExtF80UI64( (softfloat_roundingMode == softfloat_round_min), 0 ); - uiZ0 = 0; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expBBigger: - if ( expB == 0x7FFF ) { - if ( sigB & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = packToExtF80UI64( signZ ^ 1, 0x7FFF ); - uiZ0 = UINT64_C( 0x8000000000000000 ); - goto uiZ; - } - if ( ! expA ) { - ++expDiff; - sigExtra = 0; - if ( ! expDiff ) goto newlyAlignedBBigger; - } - sig128 = softfloat_shiftRightJam128( sigA, 0, -expDiff ); - sigA = sig128.v64; - sigExtra = sig128.v0; - newlyAlignedBBigger: - expZ = expB; - bBigger: - signZ = ! signZ; - sig128 = softfloat_sub128( sigB, 0, sigA, sigExtra ); - goto normRoundPack; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expABigger: - if ( expA == 0x7FFF ) { - if ( sigA & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) goto propagateNaN; - uiZ64 = uiA64; - uiZ0 = uiA0; - goto uiZ; - } - if ( ! expB ) { - --expDiff; - sigExtra = 0; - if ( ! expDiff ) goto newlyAlignedABigger; - } - sig128 = softfloat_shiftRightJam128( sigB, 0, expDiff ); - sigB = sig128.v64; - sigExtra = sig128.v0; - newlyAlignedABigger: - expZ = expA; - aBigger: - sig128 = softfloat_sub128( sigA, 0, sigB, sigExtra ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - normRoundPack: - return - softfloat_normRoundPackToExtF80( - signZ, expZ, sig128.v64, sig128.v0, extF80_roundingPrecision ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNExtF80UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ64 = uiZ.v64; - uiZ0 = uiZ.v0; - uiZ: - uZ.s.signExp = uiZ64; - uZ.s.signif = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF128.c b/addins/SoftFloat-3e/source/s_subMagsF128.c deleted file mode 100644 index e93543f09..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF128.c +++ /dev/null @@ -1,139 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float128_t - softfloat_subMagsF128( - uint_fast64_t uiA64, - uint_fast64_t uiA0, - uint_fast64_t uiB64, - uint_fast64_t uiB0, - bool signZ - ) -{ - int_fast32_t expA; - struct uint128 sigA; - int_fast32_t expB; - struct uint128 sigB, sigZ; - int_fast32_t expDiff, expZ; - struct uint128 uiZ; - union ui128_f128 uZ; - - expA = expF128UI64( uiA64 ); - sigA.v64 = fracF128UI64( uiA64 ); - sigA.v0 = uiA0; - expB = expF128UI64( uiB64 ); - sigB.v64 = fracF128UI64( uiB64 ); - sigB.v0 = uiB0; - sigA = softfloat_shortShiftLeft128( sigA.v64, sigA.v0, 4 ); - sigB = softfloat_shortShiftLeft128( sigB.v64, sigB.v0, 4 ); - expDiff = expA - expB; - if ( 0 < expDiff ) goto expABigger; - if ( expDiff < 0 ) goto expBBigger; - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 | sigB.v64 | sigB.v0 ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ.v64 = defaultNaNF128UI64; - uiZ.v0 = defaultNaNF128UI0; - goto uiZ; - } - expZ = expA; - if ( ! expZ ) expZ = 1; - if ( sigB.v64 < sigA.v64 ) goto aBigger; - if ( sigA.v64 < sigB.v64 ) goto bBigger; - if ( sigB.v0 < sigA.v0 ) goto aBigger; - if ( sigA.v0 < sigB.v0 ) goto bBigger; - uiZ.v64 = - packToF128UI64( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - uiZ.v0 = 0; - goto uiZ; - expBBigger: - if ( expB == 0x7FFF ) { - if ( sigB.v64 | sigB.v0 ) goto propagateNaN; - uiZ.v64 = packToF128UI64( signZ ^ 1, 0x7FFF, 0 ); - uiZ.v0 = 0; - goto uiZ; - } - if ( expA ) { - sigA.v64 |= UINT64_C( 0x0010000000000000 ); - } else { - ++expDiff; - if ( ! expDiff ) goto newlyAlignedBBigger; - } - sigA = softfloat_shiftRightJam128( sigA.v64, sigA.v0, -expDiff ); - newlyAlignedBBigger: - expZ = expB; - sigB.v64 |= UINT64_C( 0x0010000000000000 ); - bBigger: - signZ = ! signZ; - sigZ = softfloat_sub128( sigB.v64, sigB.v0, sigA.v64, sigA.v0 ); - goto normRoundPack; - expABigger: - if ( expA == 0x7FFF ) { - if ( sigA.v64 | sigA.v0 ) goto propagateNaN; - uiZ.v64 = uiA64; - uiZ.v0 = uiA0; - goto uiZ; - } - if ( expB ) { - sigB.v64 |= UINT64_C( 0x0010000000000000 ); - } else { - --expDiff; - if ( ! expDiff ) goto newlyAlignedABigger; - } - sigB = softfloat_shiftRightJam128( sigB.v64, sigB.v0, expDiff ); - newlyAlignedABigger: - expZ = expA; - sigA.v64 |= UINT64_C( 0x0010000000000000 ); - aBigger: - sigZ = softfloat_sub128( sigA.v64, sigA.v0, sigB.v64, sigB.v0 ); - normRoundPack: - return softfloat_normRoundPackToF128( signZ, expZ - 5, sigZ.v64, sigZ.v0 ); - propagateNaN: - uiZ = softfloat_propagateNaNF128UI( uiA64, uiA0, uiB64, uiB0 ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF16.c b/addins/SoftFloat-3e/source/s_subMagsF16.c deleted file mode 100644 index ae1417ea9..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF16.c +++ /dev/null @@ -1,187 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float16_t softfloat_subMagsF16( uint_fast16_t uiA, uint_fast16_t uiB ) -{ - int_fast8_t expA; - uint_fast16_t sigA; - int_fast8_t expB; - uint_fast16_t sigB; - int_fast8_t expDiff; - uint_fast16_t uiZ; - int_fast16_t sigDiff; - bool signZ; - int_fast8_t shiftDist, expZ; - uint_fast16_t sigZ, sigX, sigY; - uint_fast32_t sig32Z; - int_fast8_t roundingMode; - union ui16_f16 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF16UI( uiA ); - sigA = fracF16UI( uiA ); - expB = expF16UI( uiB ); - sigB = fracF16UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0x1F ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF16UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF16UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - signZ = signF16UI( uiA ); - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros16( sigDiff ) - 5; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - sigZ = sigDiff<>16; - if ( sig32Z & 0xFFFF ) { - sigZ |= 1; - } else { - if ( ! (sigZ & 0xF) && ((unsigned int) expZ < 0x1E) ) { - sigZ >>= 4; - goto pack; - } - } - return softfloat_roundPackToF16( signZ, expZ, sigZ ); - } - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - propagateNaN: - uiZ = softfloat_propagateNaNF16UI( uiA, uiB ); - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - subEpsilon: - roundingMode = softfloat_roundingMode; - if ( roundingMode != softfloat_round_near_even ) { - if ( - (roundingMode == softfloat_round_minMag) - || (roundingMode - == (signF16UI( uiZ ) ? softfloat_round_max - : softfloat_round_min)) - ) { - --uiZ; - } -#ifdef SOFTFLOAT_ROUND_ODD - else if ( roundingMode == softfloat_round_odd ) { - uiZ = (uiZ - 1) | 1; - } -#endif - } - softfloat_exceptionFlags |= softfloat_flag_inexact; - goto uiZ; - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - pack: - uiZ = packToF16UI( signZ, expZ, sigZ ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/s_subMagsF32.c b/addins/SoftFloat-3e/source/s_subMagsF32.c deleted file mode 100644 index 0c1f32ed6..000000000 --- a/addins/SoftFloat-3e/source/s_subMagsF32.c +++ /dev/null @@ -1,143 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float32_t softfloat_subMagsF32( uint_fast32_t uiA, uint_fast32_t uiB ) -{ - int_fast16_t expA; - uint_fast32_t sigA; - int_fast16_t expB; - uint_fast32_t sigB; - int_fast16_t expDiff; - uint_fast32_t uiZ; - int_fast32_t sigDiff; - bool signZ; - int_fast8_t shiftDist; - int_fast16_t expZ; - uint_fast32_t sigX, sigY; - union ui32_f32 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF32UI( uiA ); - sigA = fracF32UI( uiA ); - expB = expF32UI( uiB ); - sigB = fracF32UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0xFF ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF32UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF32UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - signZ = signF32UI( uiA ); - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros32( sigDiff ) - 8; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - uiZ = packToF32UI( signZ, expZ, sigDiff< -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -float64_t - softfloat_subMagsF64( uint_fast64_t uiA, uint_fast64_t uiB, bool signZ ) -{ - int_fast16_t expA; - uint_fast64_t sigA; - int_fast16_t expB; - uint_fast64_t sigB; - int_fast16_t expDiff; - uint_fast64_t uiZ; - int_fast64_t sigDiff; - int_fast8_t shiftDist; - int_fast16_t expZ; - uint_fast64_t sigZ; - union ui64_f64 uZ; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expA = expF64UI( uiA ); - sigA = fracF64UI( uiA ); - expB = expF64UI( uiB ); - sigB = fracF64UI( uiB ); - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - expDiff = expA - expB; - if ( ! expDiff ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - if ( expA == 0x7FF ) { - if ( sigA | sigB ) goto propagateNaN; - softfloat_raiseFlags( softfloat_flag_invalid ); - uiZ = defaultNaNF64UI; - goto uiZ; - } - sigDiff = sigA - sigB; - if ( ! sigDiff ) { - uiZ = - packToF64UI( - (softfloat_roundingMode == softfloat_round_min), 0, 0 ); - goto uiZ; - } - if ( expA ) --expA; - if ( sigDiff < 0 ) { - signZ = ! signZ; - sigDiff = -sigDiff; - } - shiftDist = softfloat_countLeadingZeros64( sigDiff ) - 11; - expZ = expA - shiftDist; - if ( expZ < 0 ) { - shiftDist = expA; - expZ = 0; - } - uiZ = packToF64UI( signZ, expZ, sigDiff< -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -bool - softfloat_tryPropagateNaNExtF80M( - const struct extFloat80M *aSPtr, - const struct extFloat80M *bSPtr, - struct extFloat80M *zSPtr - ) -{ - uint_fast16_t ui64; - uint64_t ui0; - - ui64 = aSPtr->signExp; - ui0 = aSPtr->signif; - if ( isNaNExtF80UI( ui64, ui0 ) ) goto propagateNaN; - ui64 = bSPtr->signExp; - ui0 = bSPtr->signif; - if ( isNaNExtF80UI( ui64, ui0 ) ) goto propagateNaN; - return false; - propagateNaN: - softfloat_propagateNaNExtF80M( aSPtr, bSPtr, zSPtr ); - return true; - -} - diff --git a/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c b/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c deleted file mode 100644 index bab04a7c0..000000000 --- a/addins/SoftFloat-3e/source/s_tryPropagateNaNF128M.c +++ /dev/null @@ -1,55 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" - -bool - softfloat_tryPropagateNaNF128M( - const uint32_t *aWPtr, const uint32_t *bWPtr, uint32_t *zWPtr ) -{ - - if ( softfloat_isNaNF128M( aWPtr ) || softfloat_isNaNF128M( bWPtr ) ) { - softfloat_propagateNaNF128M( aWPtr, bWPtr, zWPtr ); - return true; - } - return false; - -} - diff --git a/addins/SoftFloat-3e/source/softfloat_state.c b/addins/SoftFloat-3e/source/softfloat_state.c deleted file mode 100644 index 0f296654f..000000000 --- a/addins/SoftFloat-3e/source/softfloat_state.c +++ /dev/null @@ -1,52 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "specialize.h" -#include "softfloat.h" - -#ifndef THREAD_LOCAL -#define THREAD_LOCAL -#endif - -THREAD_LOCAL uint_fast8_t softfloat_roundingMode = softfloat_round_near_even; -THREAD_LOCAL uint_fast8_t softfloat_detectTininess = init_detectTininess; -THREAD_LOCAL uint_fast8_t softfloat_exceptionFlags = 0; - -THREAD_LOCAL uint_fast8_t extF80_roundingPrecision = 80; - diff --git a/addins/SoftFloat-3e/source/ui32_to_extF80.c b/addins/SoftFloat-3e/source/ui32_to_extF80.c deleted file mode 100644 index 34f79368f..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_extF80.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t ui32_to_extF80( uint32_t a ) -{ - uint_fast16_t uiZ64; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ); - uiZ64 = 0x401E - shiftDist; - a <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = (uint_fast64_t) a<<32; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui32_to_extF80M.c b/addins/SoftFloat-3e/source/ui32_to_extF80M.c deleted file mode 100644 index 0a0c098c0..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_extF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - - *zPtr = ui32_to_extF80( a ); - -} - -#else - -void ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ); - uiZ64 = packToExtF80UI64( 0, 0x401E - shiftDist ); - sigZ = (uint64_t) (a<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui32_to_f128.c b/addins/SoftFloat-3e/source/ui32_to_f128.c deleted file mode 100644 index c3ab53daf..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f128.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t ui32_to_f128( uint32_t a ) -{ - uint_fast64_t uiZ64; - int_fast8_t shiftDist; - union ui128_f128 uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ) + 17; - uiZ64 = - packToF128UI64( - 0, 0x402E - shiftDist, (uint_fast64_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - - *zPtr = ui32_to_f128( a ); - -} - -#else - -void ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr, uiZ96, uiZ64; - int_fast8_t shiftDist; - uint64_t normA; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros32( a ) + 17; - normA = (uint64_t) a<>32 ); - uiZ64 = normA; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui32_to_f16.c b/addins/SoftFloat-3e/source/ui32_to_f16.c deleted file mode 100644 index 6fc377bca..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f16.c +++ /dev/null @@ -1,65 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t ui32_to_f16( uint32_t a ) -{ - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - shiftDist = softfloat_countLeadingZeros32( a ) - 21; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - 0, 0x18 - shiftDist, (uint_fast16_t) a<>(-shiftDist) | ((uint32_t) (a<<(shiftDist & 31)) != 0) - : (uint_fast16_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t ui32_to_f32( uint32_t a ) -{ - union ui32_f32 uZ; - - if ( ! a ) { - uZ.ui = 0; - return uZ.f; - } - if ( a & 0x80000000 ) { - return softfloat_roundPackToF32( 0, 0x9D, a>>1 | (a & 1) ); - } else { - return softfloat_normRoundPackToF32( 0, 0x9C, a ); - } - -} - diff --git a/addins/SoftFloat-3e/source/ui32_to_f64.c b/addins/SoftFloat-3e/source/ui32_to_f64.c deleted file mode 100644 index 504f96e6e..000000000 --- a/addins/SoftFloat-3e/source/ui32_to_f64.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t ui32_to_f64( uint32_t a ) -{ - uint_fast64_t uiZ; - int_fast8_t shiftDist; - union ui64_f64 uZ; - - if ( ! a ) { - uiZ = 0; - } else { - shiftDist = softfloat_countLeadingZeros32( a ) + 21; - uiZ = - packToF64UI( 0, 0x432 - shiftDist, (uint_fast64_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -extFloat80_t ui64_to_extF80( uint64_t a ) -{ - uint_fast16_t uiZ64; - int_fast8_t shiftDist; - union { struct extFloat80M s; extFloat80_t f; } uZ; - - uiZ64 = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ); - uiZ64 = 0x403E - shiftDist; - a <<= shiftDist; - } - uZ.s.signExp = uiZ64; - uZ.s.signif = a; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui64_to_extF80M.c b/addins/SoftFloat-3e/source/ui64_to_extF80M.c deleted file mode 100644 index e676d904a..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_extF80M.c +++ /dev/null @@ -1,74 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - - *zPtr = ui64_to_extF80( a ); - -} - -#else - -void ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint64_t sigZ; - int_fast8_t shiftDist; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = 0; - sigZ = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ); - uiZ64 = packToExtF80UI64( 0, 0x403E - shiftDist ); - sigZ = a<signExp = uiZ64; - zSPtr->signif = sigZ; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui64_to_f128.c b/addins/SoftFloat-3e/source/ui64_to_f128.c deleted file mode 100644 index 6ff6a6fcf..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f128.c +++ /dev/null @@ -1,68 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float128_t ui64_to_f128( uint64_t a ) -{ - uint_fast64_t uiZ64, uiZ0; - int_fast8_t shiftDist; - struct uint128 zSig; - union ui128_f128 uZ; - - if ( ! a ) { - uiZ64 = 0; - uiZ0 = 0; - } else { - shiftDist = softfloat_countLeadingZeros64( a ) + 49; - if ( 64 <= shiftDist ) { - zSig.v64 = a<<(shiftDist - 64); - zSig.v0 = 0; - } else { - zSig = softfloat_shortShiftLeft128( 0, a, shiftDist ); - } - uiZ64 = packToF128UI64( 0, 0x406E - shiftDist, zSig.v64 ); - uiZ0 = zSig.v0; - } - uZ.ui.v64 = uiZ64; - uZ.ui.v0 = uiZ0; - return uZ.f; - -} - diff --git a/addins/SoftFloat-3e/source/ui64_to_f128M.c b/addins/SoftFloat-3e/source/ui64_to_f128M.c deleted file mode 100644 index 043406cc4..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f128M.c +++ /dev/null @@ -1,86 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -#ifdef SOFTFLOAT_FAST_INT64 - -void ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - - *zPtr = ui64_to_f128( a ); - -} - -#else - -void ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - uint32_t *zWPtr, uiZ96, uiZ64; - uint_fast8_t shiftDist; - uint32_t *ptr; - - zWPtr = (uint32_t *) zPtr; - uiZ96 = 0; - uiZ64 = 0; - zWPtr[indexWord( 4, 1 )] = 0; - zWPtr[indexWord( 4, 0 )] = 0; - if ( a ) { - shiftDist = softfloat_countLeadingZeros64( a ) + 17; - if ( shiftDist < 32 ) { - ptr = zWPtr + indexMultiwordHi( 4, 3 ); - ptr[indexWord( 3, 2 )] = 0; - ptr[indexWord( 3, 1 )] = a>>32; - ptr[indexWord( 3, 0 )] = a; - softfloat_shortShiftLeft96M( ptr, shiftDist, ptr ); - ptr[indexWordHi( 3 )] = - packToF128UI96( 0, 0x404E - shiftDist, ptr[indexWordHi( 3 )] ); - return; - } - a <<= shiftDist - 32; - uiZ96 = packToF128UI96( 0, 0x404E - shiftDist, a>>32 ); - uiZ64 = a; - } - zWPtr[indexWord( 4, 3 )] = uiZ96; - zWPtr[indexWord( 4, 2 )] = uiZ64; - -} - -#endif - diff --git a/addins/SoftFloat-3e/source/ui64_to_f16.c b/addins/SoftFloat-3e/source/ui64_to_f16.c deleted file mode 100644 index 3d58e85cf..000000000 --- a/addins/SoftFloat-3e/source/ui64_to_f16.c +++ /dev/null @@ -1,64 +0,0 @@ - -/*============================================================================ - -This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3e, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All Rights Reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float16_t ui64_to_f16( uint64_t a ) -{ - int_fast8_t shiftDist; - union ui16_f16 u; - uint_fast16_t sig; - - shiftDist = softfloat_countLeadingZeros64( a ) - 53; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF16UI( - 0, 0x18 - shiftDist, (uint_fast16_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float32_t ui64_to_f32( uint64_t a ) -{ - int_fast8_t shiftDist; - union ui32_f32 u; - uint_fast32_t sig; - - shiftDist = softfloat_countLeadingZeros64( a ) - 40; - if ( 0 <= shiftDist ) { - u.ui = - a ? packToF32UI( - 0, 0x95 - shiftDist, (uint_fast32_t) a< -#include "platform.h" -#include "internals.h" -#include "softfloat.h" - -float64_t ui64_to_f64( uint64_t a ) -{ - union ui64_f64 uZ; - - if ( ! a ) { - uZ.ui = 0; - return uZ.f; - } - if ( a & UINT64_C( 0x8000000000000000 ) ) { - return - softfloat_roundPackToF64( - 0, 0x43D, softfloat_shortShiftRightJam64( a, 1 ) ); - } else { - return softfloat_normRoundPackToF64( 0, 0x43C, a ); - } - -} - diff --git a/addins/TestFloat-3e/COPYING.txt b/addins/TestFloat-3e/COPYING.txt deleted file mode 100644 index c7443450e..000000000 --- a/addins/TestFloat-3e/COPYING.txt +++ /dev/null @@ -1,37 +0,0 @@ - -License for Berkeley TestFloat Release 3e - -John R. Hauser -2018 January 20 - -The following applies to the whole of TestFloat Release 3e as well as to -each source file individually. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions, and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - diff --git a/addins/TestFloat-3e/README.html b/addins/TestFloat-3e/README.html deleted file mode 100644 index 251408cbd..000000000 --- a/addins/TestFloat-3e/README.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - -Berkeley TestFloat Package Overview - - - - -

Package Overview for Berkeley TestFloat Release 3e

- -

-John R. Hauser
-2018 January 20
-

- -

-Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. -TestFloat is distributed in the form of C source code. -

- -

-The TestFloat package is documented in the following files in the -doc subdirectory: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TestFloat-general.html -General documentation for understanding and using the TestFloat programs. -
testfloat_gen.html -Specific documentation for the testfloat_gen program. -
testfloat_ver.html -Specific documentation for the testfloat_ver program. -
testfloat.html -Specific documentation for the all-in-one testfloat program. -
testsoftfloat.html -Specific documentation for the testsoftfloat program. -
timesoftfloat.html -Specific documentation for the timesoftfloat program. -
TestFloat-source.html -Documentation for building TestFloat. -
TestFloat-history.html    -History of the major changes to TestFloat. -
-
-Other files in the package comprise the source code for TestFloat. -

- - - diff --git a/addins/TestFloat-3e/README.txt b/addins/TestFloat-3e/README.txt deleted file mode 100644 index f2c33db31..000000000 --- a/addins/TestFloat-3e/README.txt +++ /dev/null @@ -1,26 +0,0 @@ - -Package Overview for Berkeley TestFloat Release 3e - -John R. Hauser -2018 January 20 - -Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. TestFloat is distributed in the form of C source -code. - -The TestFloat package is documented in the following files in the "doc" -subdirectory: - - TestFloat-general.html General documentation for understanding and using - the TestFloat programs. - testfloat_gen.html \ - testfloat_ver.html | Specific documentation for each TestFloat - testfloat.html | program. - testsoftfloat.html | - timesoftfloat.html / - TestFloat-source.html Documentation for building TestFloat. - TestFloat-history.html History of the major changes to TestFloat. - -Other files in the package comprise the source code for TestFloat. - diff --git a/addins/TestFloat-3e/build/Linux-386-GCC/Makefile b/addins/TestFloat-3e/build/Linux-386-GCC/Makefile deleted file mode 100644 index 440830dea..000000000 --- a/addins/TestFloat-3e/build/Linux-386-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-386-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-386-GCC/platform.h b/addins/TestFloat-3e/build/Linux-386-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-386-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile b/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile deleted file mode 100644 index 2d0a667af..000000000 --- a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-386-SSE2-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration -msse2 -mfpmath=sse \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h b/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-386-SSE2-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile b/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile deleted file mode 100644 index 37c979c46..000000000 --- a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile +++ /dev/null @@ -1,353 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-ARM-VFPv2-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h b/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile b/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile deleted file mode 100644 index 65ad2d89d..000000000 --- a/addins/TestFloat-3e/build/Linux-x86_64-GCC/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Linux-x86_64-GCC - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h b/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Linux-x86_64-GCC/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win32-MinGW/Makefile b/addins/TestFloat-3e/build/Win32-MinGW/Makefile deleted file mode 100644 index bfc0670b6..000000000 --- a/addins/TestFloat-3e/build/Win32-MinGW/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win32-MinGW - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win32-MinGW/platform.h b/addins/TestFloat-3e/build/Win32-MinGW/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win32-MinGW/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile b/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile deleted file mode 100644 index 5e0acba91..000000000 --- a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win32-SSE2-MinGW - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration -msse2 -mfpmath=sse \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - gcc -std=c99 -c -Werror-implicit-function-declaration $(TESTFLOAT_OPTS) \ - $(C_INCLUDES) -O3 -o $@ -MAKELIB = ar crs $@ -LINK = gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h b/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win32-SSE2-MinGW/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile b/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile deleted file mode 100644 index 914266904..000000000 --- a/addins/TestFloat-3e/build/Win64-MinGW-w64/Makefile +++ /dev/null @@ -1,355 +0,0 @@ - -#============================================================================= -# -# This Makefile is part of TestFloat, Release 3e, a package of programs for -# testing the correctness of floating-point arithmetic complying with the IEEE -# Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -SOURCE_DIR ?= ../../source -SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -PLATFORM ?= Win64-MinGW-w64 - -SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -SOFTFLOAT_H = \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ - $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -TESTFLOAT_OPTS ?= \ - -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ - -DLONG_DOUBLE_IS_EXTFLOAT80 - -DELETE = rm -f -C_INCLUDES = \ - -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -COMPILE_C = \ - x86_64-w64-mingw32-gcc -std=c99 -c -Werror-implicit-function-declaration \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -COMPILE_SLOWFLOAT_C = \ - x86_64-w64-mingw32-gcc -std=c99 -c -Werror-implicit-function-declaration \ - $(TESTFLOAT_OPTS) $(C_INCLUDES) -O3 -o $@ -MAKELIB = x86_64-w64-mingw32-ar crs $@ -LINK = x86_64-w64-mingw32-gcc -o $@ -OTHER_LIBS = -lm - -OBJ = .o -LIB = .a -EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h b/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h deleted file mode 100644 index 3ccb35e9b..000000000 --- a/addins/TestFloat-3e/build/Win64-MinGW-w64/platform.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef __GNUC_STDC_INLINE__ -#define INLINE inline -#else -#define INLINE extern inline -#endif - diff --git a/addins/TestFloat-3e/build/template/Makefile b/addins/TestFloat-3e/build/template/Makefile deleted file mode 100644 index f5c3b602f..000000000 --- a/addins/TestFloat-3e/build/template/Makefile +++ /dev/null @@ -1,353 +0,0 @@ - -#============================================================================= -# -# This Makefile template is part of TestFloat, Release 3e, a package of -# programs for testing the correctness of floating-point arithmetic complying -# with the IEEE Standard for Floating-Point, by John R. Hauser. -# -# Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -# University of California. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright notice, -# this list of conditions, and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions, and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of the University nor the names of its contributors -# may be used to endorse or promote products derived from this software -# without specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -# DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -#============================================================================= - -# Edit lines marked with `==>'. See "TestFloat-source.html". - -==> SOURCE_DIR ?= ../../source -==> SOFTFLOAT_DIR ?= ../../../SoftFloat-3e -==> PLATFORM ?= Win32-MinGW - -==> SUBJ_SOURCE_DIR = $(SOURCE_DIR)/subj-C -==> SOFTFLOAT_INCLUDE_DIR = $(SOFTFLOAT_DIR)/source/include - -==> SOFTFLOAT_H = \ -==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat_types.h \ -==> $(SOFTFLOAT_INCLUDE_DIR)/softfloat.h -==> SOFTFLOAT_LIB = $(SOFTFLOAT_DIR)/build/$(PLATFORM)/softfloat$(LIB) - -==> TESTFLOAT_OPTS ?= \ -==> -DFLOAT16 -DFLOAT64 -DEXTFLOAT80 -DFLOAT128 -DFLOAT_ROUND_ODD \ -==> -DLONG_DOUBLE_IS_EXTFLOAT80 - -==> DELETE = rm -f -==> C_INCLUDES = \ -==> -I. -I$(SUBJ_SOURCE_DIR) -I$(SOURCE_DIR) -I$(SOFTFLOAT_INCLUDE_DIR) -==> COMPILE_C = cc -c $(TESTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ -==> COMPILE_SLOWFLOAT_C = cc -c $(TESTFLOAT_OPTS) $(C_INCLUDES) -O3 -o $@ -==> MAKELIB = ar crs $@ -==> LINK = ld -o $@ -==> OTHER_LIBS = -lm - -==> OBJ = .o -==> LIB = .a -==> EXE = .exe - -.PHONY: all -all: \ - testsoftfloat$(EXE) \ - timesoftfloat$(EXE) \ - testfloat_gen$(EXE) \ - testfloat_ver$(EXE) \ - testfloat$(EXE) \ - -OBJS_GENCASES = \ - genCases_ui32$(OBJ) \ - genCases_ui64$(OBJ) \ - genCases_i32$(OBJ) \ - genCases_i64$(OBJ) \ - genCases_f16$(OBJ) \ - genCases_f32$(OBJ) \ - genCases_f64$(OBJ) \ - genCases_extF80$(OBJ) \ - genCases_f128$(OBJ) \ - -OBJS_WRITECASE = \ - writeCase_a_ui32$(OBJ) \ - writeCase_a_ui64$(OBJ) \ - writeCase_a_f16$(OBJ) \ - writeCase_ab_f16$(OBJ) \ - writeCase_abc_f16$(OBJ) \ - writeCase_a_f32$(OBJ) \ - writeCase_ab_f32$(OBJ) \ - writeCase_abc_f32$(OBJ) \ - writeCase_a_f64$(OBJ) \ - writeCase_ab_f64$(OBJ) \ - writeCase_abc_f64$(OBJ) \ - writeCase_a_extF80M$(OBJ) \ - writeCase_ab_extF80M$(OBJ) \ - writeCase_a_f128M$(OBJ) \ - writeCase_ab_f128M$(OBJ) \ - writeCase_abc_f128M$(OBJ) \ - writeCase_z_bool$(OBJ) \ - writeCase_z_ui32$(OBJ) \ - writeCase_z_ui64$(OBJ) \ - writeCase_z_f16$(OBJ) \ - writeCase_z_f32$(OBJ) \ - writeCase_z_f64$(OBJ) \ - writeCase_z_extF80M$(OBJ) \ - writeCase_z_f128M$(OBJ) \ - -OBJS_TEST = \ - test_a_ui32_z_f16$(OBJ) \ - test_a_ui32_z_f32$(OBJ) \ - test_a_ui32_z_f64$(OBJ) \ - test_a_ui32_z_extF80$(OBJ) \ - test_a_ui32_z_f128$(OBJ) \ - test_a_ui64_z_f16$(OBJ) \ - test_a_ui64_z_f32$(OBJ) \ - test_a_ui64_z_f64$(OBJ) \ - test_a_ui64_z_extF80$(OBJ) \ - test_a_ui64_z_f128$(OBJ) \ - test_a_i32_z_f16$(OBJ) \ - test_a_i32_z_f32$(OBJ) \ - test_a_i32_z_f64$(OBJ) \ - test_a_i32_z_extF80$(OBJ) \ - test_a_i32_z_f128$(OBJ) \ - test_a_i64_z_f16$(OBJ) \ - test_a_i64_z_f32$(OBJ) \ - test_a_i64_z_f64$(OBJ) \ - test_a_i64_z_extF80$(OBJ) \ - test_a_i64_z_f128$(OBJ) \ - test_a_f16_z_ui32_rx$(OBJ) \ - test_a_f16_z_ui64_rx$(OBJ) \ - test_a_f16_z_i32_rx$(OBJ) \ - test_a_f16_z_i64_rx$(OBJ) \ - test_a_f16_z_ui32_x$(OBJ) \ - test_a_f16_z_ui64_x$(OBJ) \ - test_a_f16_z_i32_x$(OBJ) \ - test_a_f16_z_i64_x$(OBJ) \ - test_a_f16_z_f32$(OBJ) \ - test_a_f16_z_f64$(OBJ) \ - test_a_f16_z_extF80$(OBJ) \ - test_a_f16_z_f128$(OBJ) \ - test_az_f16$(OBJ) \ - test_az_f16_rx$(OBJ) \ - test_abz_f16$(OBJ) \ - test_abcz_f16$(OBJ) \ - test_ab_f16_z_bool$(OBJ) \ - test_a_f32_z_ui32_rx$(OBJ) \ - test_a_f32_z_ui64_rx$(OBJ) \ - test_a_f32_z_i32_rx$(OBJ) \ - test_a_f32_z_i64_rx$(OBJ) \ - test_a_f32_z_ui32_x$(OBJ) \ - test_a_f32_z_ui64_x$(OBJ) \ - test_a_f32_z_i32_x$(OBJ) \ - test_a_f32_z_i64_x$(OBJ) \ - test_a_f32_z_f16$(OBJ) \ - test_a_f32_z_f64$(OBJ) \ - test_a_f32_z_extF80$(OBJ) \ - test_a_f32_z_f128$(OBJ) \ - test_az_f32$(OBJ) \ - test_az_f32_rx$(OBJ) \ - test_abz_f32$(OBJ) \ - test_abcz_f32$(OBJ) \ - test_ab_f32_z_bool$(OBJ) \ - test_a_f64_z_ui32_rx$(OBJ) \ - test_a_f64_z_ui64_rx$(OBJ) \ - test_a_f64_z_i32_rx$(OBJ) \ - test_a_f64_z_i64_rx$(OBJ) \ - test_a_f64_z_ui32_x$(OBJ) \ - test_a_f64_z_ui64_x$(OBJ) \ - test_a_f64_z_i32_x$(OBJ) \ - test_a_f64_z_i64_x$(OBJ) \ - test_a_f64_z_f16$(OBJ) \ - test_a_f64_z_f32$(OBJ) \ - test_a_f64_z_extF80$(OBJ) \ - test_a_f64_z_f128$(OBJ) \ - test_az_f64$(OBJ) \ - test_az_f64_rx$(OBJ) \ - test_abz_f64$(OBJ) \ - test_abcz_f64$(OBJ) \ - test_ab_f64_z_bool$(OBJ) \ - test_a_extF80_z_ui32_rx$(OBJ) \ - test_a_extF80_z_ui64_rx$(OBJ) \ - test_a_extF80_z_i32_rx$(OBJ) \ - test_a_extF80_z_i64_rx$(OBJ) \ - test_a_extF80_z_ui32_x$(OBJ) \ - test_a_extF80_z_ui64_x$(OBJ) \ - test_a_extF80_z_i32_x$(OBJ) \ - test_a_extF80_z_i64_x$(OBJ) \ - test_a_extF80_z_f16$(OBJ) \ - test_a_extF80_z_f32$(OBJ) \ - test_a_extF80_z_f64$(OBJ) \ - test_a_extF80_z_f128$(OBJ) \ - test_az_extF80$(OBJ) \ - test_az_extF80_rx$(OBJ) \ - test_abz_extF80$(OBJ) \ - test_ab_extF80_z_bool$(OBJ) \ - test_a_f128_z_ui32_rx$(OBJ) \ - test_a_f128_z_ui64_rx$(OBJ) \ - test_a_f128_z_i32_rx$(OBJ) \ - test_a_f128_z_i64_rx$(OBJ) \ - test_a_f128_z_ui32_x$(OBJ) \ - test_a_f128_z_ui64_x$(OBJ) \ - test_a_f128_z_i32_x$(OBJ) \ - test_a_f128_z_i64_x$(OBJ) \ - test_a_f128_z_f16$(OBJ) \ - test_a_f128_z_f32$(OBJ) \ - test_a_f128_z_f64$(OBJ) \ - test_a_f128_z_extF80$(OBJ) \ - test_az_f128$(OBJ) \ - test_az_f128_rx$(OBJ) \ - test_abz_f128$(OBJ) \ - test_abcz_f128$(OBJ) \ - test_ab_f128_z_bool$(OBJ) \ - -OBJS_LIB = \ - uint128_inline$(OBJ) \ - uint128$(OBJ) \ - fail$(OBJ) \ - functions_common$(OBJ) \ - functionInfos$(OBJ) \ - standardFunctionInfos$(OBJ) \ - random$(OBJ) \ - genCases_common$(OBJ) \ - $(OBJS_GENCASES) \ - genCases_writeTestsTotal$(OBJ) \ - verCases_inline$(OBJ) \ - verCases_common$(OBJ) \ - verCases_writeFunctionName$(OBJ) \ - readHex$(OBJ) \ - writeHex$(OBJ) \ - $(OBJS_WRITECASE) \ - testLoops_common$(OBJ) \ - $(OBJS_TEST) \ - -uint128$(OBJ): $(SOURCE_DIR)/uint128.h -fail$(OBJ): $(SOURCE_DIR)/fail.h -functions_common$(OBJ): $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h -functionInfos$(OBJ): $(SOURCE_DIR)/functions.h -standardFunctionInfos$(OBJ): $(SOURCE_DIR)/functions.h -random$(OBJ): $(SOURCE_DIR)/random.h -genCases_common$(OBJ): $(SOURCE_DIR)/fail.h $(SOURCE_DIR)/genCases.h -$(OBJS_GENCASES): \ - $(SOURCE_DIR)/random.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h -genCases_f128$(OBJ): $(SOURCE_DIR)/uint128.h -genCases_writeTestsTotal$(OBJ): $(SOURCE_DIR)/genCases.h -verCases_common$(OBJ): $(SOURCE_DIR)/verCases.h -verCases_writeFunctionName$(OBJ): $(SOURCE_DIR)/verCases.h -readHex$(OBJ): $(SOURCE_DIR)/readHex.h -writeHex$(OBJ): $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h -$(OBJS_WRITECASE): \ - $(SOFTFLOAT_H) $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/writeCase.h -testLoops_common$(OBJ): $(SOURCE_DIR)/testLoops.h -$(OBJS_TEST): \ - $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) $(SOURCE_DIR)/genCases.h \ - $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/testLoops.h -$(OBJS_LIB): %$(OBJ): platform.h $(SOURCE_DIR)/%.c - $(COMPILE_C) $(SOURCE_DIR)/$*.c -testfloat$(LIB): $(OBJS_LIB) - $(MAKELIB) $^ - -OBJS_TESTSOFTFLOAT = slowfloat$(OBJ) testsoftfloat$(OBJ) - -slowfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/slowfloat.c - $(COMPILE_SLOWFLOAT_C) $(SOURCE_DIR)/slowfloat.c -testsoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/slowfloat.h $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testsoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testsoftfloat.c - -testsoftfloat$(EXE): $(OBJS_TESTSOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TIMESOFTFLOAT = timesoftfloat$(OBJ) - -timesoftfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/timesoftfloat.c - $(COMPILE_C) $(SOURCE_DIR)/timesoftfloat.c - -timesoftfloat$(EXE): $(OBJS_TIMESOFTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_GEN = genLoops$(OBJ) testfloat_gen$(OBJ) - -genLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/writeHex.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/genLoops.c - $(COMPILE_C) $(SOURCE_DIR)/genLoops.c -testfloat_gen$(OBJ): \ - $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) $(SOURCE_DIR)/functions.h \ - $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/genLoops.h \ - $(SOURCE_DIR)/testfloat_gen.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_gen.c - -testfloat_gen$(EXE): $(OBJS_TESTFLOAT_GEN) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT_VER = verLoops$(OBJ) testfloat_ver$(OBJ) - -verLoops$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/readHex.h $(SOURCE_DIR)/verCases.h $(SOURCE_DIR)/writeCase.h \ - $(SOURCE_DIR)/verLoops.h $(SOURCE_DIR)/verLoops.c - $(COMPILE_C) $(SOURCE_DIR)/verLoops.c -testfloat_ver$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/writeCase.h $(SOURCE_DIR)/verLoops.h \ - $(SOURCE_DIR)/testfloat_ver.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat_ver.c - -testfloat_ver$(EXE): $(OBJS_TESTFLOAT_VER) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -OBJS_TESTFLOAT = subjfloat$(OBJ) subjfloat_functions$(OBJ) testfloat$(OBJ) - -subjfloat$(OBJ): \ - platform.h $(SOFTFLOAT_H) $(SUBJ_SOURCE_DIR)/subjfloat_config.h \ - $(SOURCE_DIR)/subjfloat.h $(SUBJ_SOURCE_DIR)/subjfloat.c - $(COMPILE_C) $(SUBJ_SOURCE_DIR)/subjfloat.c -subjfloat_functions$(OBJ): \ - platform.h $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/subjfloat_functions.c - $(COMPILE_C) $(SOURCE_DIR)/subjfloat_functions.c -testfloat$(OBJ): \ - platform.h $(SOURCE_DIR)/uint128.h $(SOURCE_DIR)/fail.h $(SOFTFLOAT_H) \ - $(SUBJ_SOURCE_DIR)/subjfloat_config.h $(SOURCE_DIR)/subjfloat.h \ - $(SOURCE_DIR)/functions.h $(SOURCE_DIR)/genCases.h $(SOURCE_DIR)/verCases.h \ - $(SOURCE_DIR)/testLoops.h $(SOURCE_DIR)/testfloat.c - $(COMPILE_C) $(SOURCE_DIR)/testfloat.c - -testfloat$(EXE): $(OBJS_TESTFLOAT) testfloat$(LIB) $(SOFTFLOAT_LIB) - $(LINK) $^ $(OTHER_LIBS) - -.PHONY: clean -clean: - $(DELETE) $(OBJS_LIB) testfloat$(LIB) - $(DELETE) $(OBJS_TESTSOFTFLOAT) testsoftfloat$(EXE) - $(DELETE) $(OBJS_TIMESOFTFLOAT) timesoftfloat$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_GEN) testfloat_gen$(EXE) - $(DELETE) $(OBJS_TESTFLOAT_VER) testfloat_ver$(EXE) - $(DELETE) $(OBJS_TESTFLOAT) testfloat$(EXE) - diff --git a/addins/TestFloat-3e/build/template/platform.h b/addins/TestFloat-3e/build/template/platform.h deleted file mode 100644 index 29cb8cc0c..000000000 --- a/addins/TestFloat-3e/build/template/platform.h +++ /dev/null @@ -1,51 +0,0 @@ - -/*============================================================================ - -This C header template is part of TestFloat, Release 3e, a package of programs -for testing the correctness of floating-point arithmetic complying with the -IEEE Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -// Edit lines marked with `==>'. See "TestFloat-source.html". - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define LITTLEENDIAN 1 - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define INLINE inline - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -==> #define THREAD_LOCAL _Thread_local - diff --git a/addins/TestFloat-3e/doc/TestFloat-general.html b/addins/TestFloat-3e/doc/TestFloat-general.html deleted file mode 100644 index 730edc4be..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-general.html +++ /dev/null @@ -1,1148 +0,0 @@ - - - - -Berkeley TestFloat General Documentation - - - - -

Berkeley TestFloat Release 3e: General Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. What TestFloat Does
5. Executing TestFloat
6. Operations Tested by TestFloat
6.1. Conversion Operations
6.2. Basic Arithmetic Operations
6.3. Fused Multiply-Add Operations
6.4. Remainder Operations
6.5. Round-to-Integer Operations
6.6. Comparison Operations
7. Interpreting TestFloat Output
8. Variations Allowed by the IEEE Floating-Point Standard
8.1. Underflow
8.2. NaNs
8.3. Conversions to Integer
9. Contact Information
-
- - -

1. Introduction

- -

-Berkeley TestFloat is a small collection of programs for testing that an -implementation of binary floating-point conforms to the IEEE Standard for -Floating-Point Arithmetic. -All operations required by the original 1985 version of the IEEE Floating-Point -Standard can be tested, except for conversions to and from decimal. -With the current release, the following binary formats can be tested: -16-bit half-precision, 32-bit single-precision, -64-bit double-precision, 80-bit -double-extended-precision, and/or 128-bit quadruple-precision. -TestFloat cannot test decimal floating-point. -

- -

-Included in the TestFloat package are the testsoftfloat and -timesoftfloat programs for testing the Berkeley SoftFloat software -implementation of floating-point and for measuring its speed. -Information about SoftFloat can be found at the SoftFloat Web page, -http://www.jhauser.us/arithmetic/SoftFloat.html. -The testsoftfloat and timesoftfloat programs are -expected to be of interest only to people compiling the SoftFloat sources. -

- -

-This document explains how to use the TestFloat programs. -It does not attempt to define or explain much of the IEEE Floating-Point -Standard. -Details about the standard are available elsewhere. -

- -

-The current version of TestFloat is Release 3e. -This version differs from earlier releases 3b through 3d in only minor ways. -Compared to the original Release 3: -

    -
  • -Release 3b added the ability to test the 16-bit -half-precision format. -
  • -Release 3c added the ability to test a rarely used rounding mode, -round to odd, also known as jamming. -
  • -Release 3d modified the code for testing C arithmetic to -potentially include testing newer library functions sqrtf, -sqrtl, fmaf, fma, and fmal. -
-This release adds a few more small improvements, including modifying the -expected behavior of rounding mode odd and fixing a minor bug in -the all-in-one testfloat program. -

- -

-Compared to Release 2c and earlier, the set of TestFloat programs, as well as -the programs’ arguments and behavior, changed some with -Release 3. -For more about the evolution of TestFloat releases, see -TestFloat-history.html. -

- - -

2. Limitations

- -

-TestFloat output is not always easily interpreted. -Detailed knowledge of the IEEE Floating-Point Standard and its vagaries is -needed to use TestFloat responsibly. -

- -

-TestFloat performs relatively simple tests designed to check the fundamental -soundness of the floating-point under test. -TestFloat may also at times manage to find rarer and more subtle bugs, but it -will probably only find such bugs by chance. -Software that purposefully seeks out various kinds of subtle floating-point -bugs can be found through links posted on the TestFloat Web page, -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - -

3. Acknowledgments and License

- -

-The TestFloat package was written by me, John R. Hauser. -Release 3 of TestFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of TestFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. -All rights reserved. -

- -

-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -

    - -
  1. -

    -Redistributions of source code must retain the above copyright notice, this -list of conditions, and the following disclaimer. -

    - -
  2. -

    -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions, and the following disclaimer in the documentation and/or -other materials provided with the distribution. -

    - -
  3. -

    -Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. -

    - -
-

- -

-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS”, -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. -IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

- - -

4. What TestFloat Does

- -

-TestFloat is designed to test a floating-point implementation by comparing its -behavior with that of TestFloat’s own internal floating-point implemented -in software. -For each operation to be tested, the TestFloat programs can generate a large -number of test cases, made up of simple pattern tests intermixed with weighted -random inputs. -The cases generated should be adequate for testing carry chain propagations, -and the rounding of addition, subtraction, multiplication, and simple -operations like conversions. -TestFloat makes a point of checking all boundary cases of the arithmetic, -including underflows, overflows, invalid operations, subnormal inputs, zeros -(positive and negative), infinities, and NaNs. -For the interesting operations like addition and multiplication, millions of -test cases may be checked. -

- -

-TestFloat is not remarkably good at testing difficult rounding cases for -division and square root. -It also makes no attempt to find bugs specific to SRT division and the like -(such as the infamous Pentium division bug). -Software that tests for such failures can be found through links on the -TestFloat Web page, -http://www.jhauser.us/arithmetic/TestFloat.html. -

- -

-NOTE!
-It is the responsibility of the user to verify that the discrepancies TestFloat -finds actually represent faults in the implementation being tested. -Advice to help with this task is provided later in this document. -Furthermore, even if TestFloat finds no fault with a floating-point -implementation, that in no way guarantees that the implementation is bug-free. -

- -

-For each operation, TestFloat can test all five rounding modes defined by the -IEEE Floating-Point Standard, plus possibly a sixth mode, round to odd -(depending on the options selected when TestFloat was built). -TestFloat verifies not only that the numeric results of an operation are -correct, but also that the proper floating-point exception flags are raised. -All five exception flags are tested, including the inexact flag. -TestFloat does not attempt to verify that the floating-point exception flags -are actually implemented as sticky flags. -

- -

-For the 80-bit double-extended-precision format, TestFloat can -test the addition, subtraction, multiplication, division, and square root -operations at all three of the standard rounding precisions. -The rounding precision can be set to 32 bits, equivalent to -single-precision, to 64 bits, equivalent to double-precision, or -to the full 80 bits of the double-extended-precision. -Rounding precision control can be applied only to the double-extended-precision -format and only for the five basic arithmetic operations: addition, -subtraction, multiplication, division, and square root. -Other operations can be tested only at full precision. -

- -

-As a rule, TestFloat is not particular about the bit patterns of NaNs that -appear as operation results. -Any NaN is considered as good a result as another. -This laxness can be overridden so that TestFloat checks for particular bit -patterns within NaN results. -See section 8 below, Variations Allowed by the IEEE -Floating-Point Standard, plus the -checkNaNs and --checkInvInts options documented for programs -testfloat_ver and testfloat. -

- -

-TestFloat normally compares an implementation of floating-point against the -Berkeley SoftFloat software implementation of floating-point, also created by -me. -The SoftFloat functions are linked into each TestFloat program’s -executable. -Information about SoftFloat can be found at the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- -

-For testing SoftFloat itself, the TestFloat package includes a -testsoftfloat program that compares SoftFloat’s -floating-point against another software floating-point implementation. -The second software floating-point is simpler and slower than SoftFloat, and is -completely independent of SoftFloat. -Although the second software floating-point cannot be guaranteed to be -bug-free, the chance that it would mimic any of SoftFloat’s bugs is low. -Consequently, an error in one or the other floating-point version should appear -as an unexpected difference between the two implementations. -Note that testing SoftFloat should be necessary only when compiling a new -TestFloat executable or when compiling SoftFloat for some other reason. -

- - -

5. Executing TestFloat

- -

-The TestFloat package consists of five programs, all intended to be executed -from a command-line interpreter: -

- - - - - - - - - - - - - - - - - - - - - -
-testfloat_gen    - -Generates test cases for a specific floating-point operation. -
-testfloat_ver - -Verifies whether the results from executing a floating-point operation are as -expected. -
-testfloat - -An all-in-one program that generates test cases, executes floating-point -operations, and verifies whether the results match expectations. -
-testsoftfloat    - -Like testfloat, but for testing SoftFloat. -
-timesoftfloat    - -A program for measuring the speed of SoftFloat (included in the TestFloat -package for convenience). -
-
-Each program has its own page of documentation that can be opened through the -links in the table above. -

- -

-To test a floating-point implementation other than SoftFloat, one of three -different methods can be used. -The first method pipes output from testfloat_gen to a program -that: -(a) reads the incoming test cases, (b) invokes the -floating-point operation being tested, and (c) writes the -operation results to output. -These results can then be piped to testfloat_ver to be checked for -correctness. -Assuming a vertical bar (|) indicates a pipe between programs, the -complete process could be written as a single command like so: -

-
-testfloat_gen ... <type> | <program-that-invokes-op> | testfloat_ver ... <function>
-
-
-The program in the middle is not supplied by TestFloat but must be created -independently. -If for some reason this program cannot take command-line arguments, the --prefix option of testfloat_gen can communicate -parameters through the pipe. -

- -

-A second method for running TestFloat is similar but has -testfloat_gen supply not only the test inputs but also the -expected results for each case. -With this additional information, the job done by testfloat_ver -can be folded into the invoking program to give the following command: -

-
-testfloat_gen ... <function> | <program-that-invokes-op-and-compares-results>
-
-
-Again, the program that actually invokes the floating-point operation is not -supplied by TestFloat but must be created independently. -Depending on circumstance, it may be preferable either to let -testfloat_ver check and report suspected errors (first method) or -to include this step in the invoking program (second method). -

- -

-The third way to use TestFloat is the all-in-one testfloat -program. -This program can perform all the steps of creating test cases, invoking the -floating-point operation, checking the results, and reporting suspected errors. -However, for this to be possible, testfloat must be compiled to -contain the method for invoking the floating-point operations to test. -Each build of testfloat is therefore capable of testing -only the floating-point implementation it was built to invoke. -To test a new implementation of floating-point, a new testfloat -must be created, linked to that specific implementation. -By comparison, the testfloat_gen and testfloat_ver -programs are entirely generic; -one instance is usable for testing any floating-point implementation, because -implementation-specific details are segregated in the custom program that -follows testfloat_gen. -

- -

-Program testsoftfloat is another all-in-one program specifically -for testing SoftFloat. -

- -

-Programs testfloat_ver, testfloat, and -testsoftfloat all report status and error information in a common -way. -As it executes, each of these programs writes status information to the -standard error output, which should be the screen by default. -In order for this status to be displayed properly, the standard error stream -should not be redirected to a file. -Any discrepancies that are found are written to the standard output stream, -which is easily redirected to a file if desired. -Unless redirected, reported errors will appear intermixed with the ongoing -status information in the output. -

- - -

6. Operations Tested by TestFloat

- -

-TestFloat can test all operations required by the original 1985 IEEE -Floating-Point Standard except for conversions to and from decimal. -These operations are: -

    -
  • -conversions among the supported floating-point formats, and also between -integers (32-bit and 64-bit, signed and unsigned) and -any of the floating-point formats; -
  • -for each floating-point format, the usual addition, subtraction, -multiplication, division, and square root operations; -
  • -for each format, the floating-point remainder operation defined by the IEEE -Standard; -
  • -for each format, a “round to integer” operation that rounds to the -nearest integer value in the same format; and -
  • -comparisons between two values in the same floating-point format. -
-In addition, TestFloat can also test -
    -
  • -for each floating-point format except 80-bit -double-extended-precision, the fused multiply-add operation defined by the 2008 -IEEE Standard. -
-

- -

-More information about all these operations is given below. -In the operation names used by TestFloat, 16-bit half-precision is -called f16, 32-bit single-precision is -f32, 64-bit double-precision is f64, -80-bit double-extended-precision is extF80, and -128-bit quadruple-precision is f128. -TestFloat generally uses the same names for operations as Berkeley SoftFloat, -except that TestFloat’s names never include the M that -SoftFloat uses to indicate that values are passed through pointers. -

- -

6.1. Conversion Operations

- -

-All conversions among the floating-point formats and all conversions between a -floating-point format and 32-bit and 64-bit integers -can be tested. -The conversion operations are: -

-
-ui32_to_f16      ui64_to_f16      i32_to_f16       i64_to_f16
-ui32_to_f32      ui64_to_f32      i32_to_f32       i64_to_f32
-ui32_to_f64      ui64_to_f64      i32_to_f64       i64_to_f64
-ui32_to_extF80   ui64_to_extF80   i32_to_extF80    i64_to_extF80
-ui32_to_f128     ui64_to_f128     i32_to_f128      i64_to_f128
-
-f16_to_ui32      f32_to_ui32      f64_to_ui32      extF80_to_ui32    f128_to_ui32
-f16_to_ui64      f32_to_ui64      f64_to_ui64      extF80_to_ui64    f128_to_ui64
-f16_to_i32       f32_to_i32       f64_to_i32       extF80_to_i32     f128_to_i32
-f16_to_i64       f32_to_i64       f64_to_i64       extF80_to_i64     f128_to_i64
-
-f16_to_f32       f32_to_f16       f64_to_f16       extF80_to_f16     f128_to_f16
-f16_to_f64       f32_to_f64       f64_to_f32       extF80_to_f32     f128_to_f32
-f16_to_extF80    f32_to_extF80    f64_to_extF80    extF80_to_f64     f128_to_f64
-f16_to_f128      f32_to_f128      f64_to_f128      extF80_to_f128    f128_to_extF80
-
-
-Abbreviations ui32 and ui64 indicate -32-bit and 64-bit unsigned integer types, while -i32 and i64 indicate their signed counterparts. -These conversions all round according to the current rounding mode as relevant. -Conversions from a smaller to a larger floating-point format are always exact -and so require no rounding. -Likewise, conversions from 32-bit integers to 64-bit -double-precision or to any larger floating-point format are also exact, as are -conversions from 64-bit integers to 80-bit -double-extended-precision and 128-bit quadruple-precision. -

- -

-For the all-in-one testfloat program, this list of conversion -operations requires amendment. -For testfloat only, conversions to an integer type have names that -explicitly specify the rounding mode and treatment of inexactness. -Thus, instead of -

-
-<float>_to_<int>
-
-
-as listed above, operations converting to integer type have names of these -forms: -
-
-<float>_to_<int>_r_<round>
-<float>_to_<int>_rx_<round>
-
-
-The <round> component is one of -‘near_even’, ‘near_maxMag’, -‘minMag’, ‘min’, or -‘max’, choosing the rounding mode. -Any other indication of rounding mode is ignored. -The operations with ‘_r_’ in their names never raise -the inexact exception, while those with ‘_rx_’ -raise the inexact exception whenever the result is not exact. -

- -

-TestFloat assumes that conversions from floating-point to an integer type -should raise the invalid exception if the input cannot be rounded to an -integer representable in the result format. -In such a circumstance: -

    - -
  • -

    -If the result type is an unsigned integer, TestFloat normally expects the -result of the operation to be the type’s largest integer value. -In the case that the input is a negative number (not a NaN), a zero result may -also be accepted. -

    - -
  • -

    -If the result type is a signed integer and the input is a number (not a NaN), -TestFloat expects the result to be the largest-magnitude integer with the same -sign as the input. -When a NaN is converted to a signed integer type, TestFloat allows either the -largest postive or largest-magnitude negative integer to be returned. -

    - -
-Conversions to integer types are expected never to raise the overflow -exception. -

- -

6.2. Basic Arithmetic Operations

- -

-The following standard arithmetic operations can be tested: -

-
-f16_add      f16_sub      f16_mul      f16_div      f16_sqrt
-f32_add      f32_sub      f32_mul      f32_div      f32_sqrt
-f64_add      f64_sub      f64_mul      f64_div      f64_sqrt
-extF80_add   extF80_sub   extF80_mul   extF80_div   extF80_sqrt
-f128_add     f128_sub     f128_mul     f128_div     f128_sqrt
-
-
-The double-extended-precision (extF80) operations can be rounded -to reduced precision under rounding precision control. -

- -

6.3. Fused Multiply-Add Operations

- -

-For all floating-point formats except 80-bit -double-extended-precision, TestFloat can test the fused multiply-add operation -defined by the 2008 IEEE Floating-Point Standard. -The fused multiply-add operations are: -

-
-f16_mulAdd
-f32_mulAdd
-f64_mulAdd
-f128_mulAdd
-
-
-

- -

-If one of the multiplication operands is infinite and the other is zero, -TestFloat expects the fused multiply-add operation to raise the invalid -exception even if the third operand is a quiet NaN. -

- -

6.4. Remainder Operations

- -

-For each format, TestFloat can test the IEEE Standard’s remainder -operation. -These operations are: -

-
-f16_rem
-f32_rem
-f64_rem
-extF80_rem
-f128_rem
-
-
-The remainder operations are always exact and so require no rounding. -

- -

6.5. Round-to-Integer Operations

- -

-For each format, TestFloat can test the IEEE Standard’s round-to-integer -operation. -For most TestFloat programs, these operations are: -

-
-f16_roundToInt
-f32_roundToInt
-f64_roundToInt
-extF80_roundToInt
-f128_roundToInt
-
-
-

- -

-Just as for conversions to integer types (section 6.1 above), the -all-in-one testfloat program is again an exception. -For testfloat only, the round-to-integer operations have names of -these forms: -

-
-<float>_roundToInt_r_<round>
-<float>_roundToInt_x
-
-
-For the ‘_r_’ versions, the inexact exception -is never raised, and the <round> component specifies -the rounding mode as one of ‘near_even’, -‘near_maxMag’, ‘minMag’, -‘min’, or ‘max’. -The usual indication of rounding mode is ignored. -In contrast, the ‘_x’ versions accept the usual -indication of rounding mode and raise the inexact exception whenever the -result is not exact. -This irregular system follows the IEEE Standard’s particular -specification for the round-to-integer operations. -

- -

6.6. Comparison Operations

- -

-The following floating-point comparison operations can be tested: -

-
-f16_eq      f16_le      f16_lt
-f32_eq      f32_le      f32_lt
-f64_eq      f64_le      f64_lt
-extF80_eq   extF80_le   extF80_lt
-f128_eq     f128_le     f128_lt
-
-
-The abbreviation eq stands for “equal” (=), -le stands for “less than or equal” (≤), and -lt stands for “less than” (<). -

- -

-The IEEE Standard specifies that, by default, the less-than-or-equal and -less-than comparisons raise the invalid exception if either input is any -kind of NaN. -The equality comparisons, on the other hand, are defined by default to raise -the invalid exception only for signaling NaNs, not for quiet NaNs. -For completeness, the following additional operations can be tested if -supported: -

-
-f16_eq_signaling      f16_le_quiet      f16_lt_quiet
-f32_eq_signaling      f32_le_quiet      f32_lt_quiet
-f64_eq_signaling      f64_le_quiet      f64_lt_quiet
-extF80_eq_signaling   extF80_le_quiet   extF80_lt_quiet
-f128_eq_signaling     f128_le_quiet     f128_lt_quiet
-
-
-The signaling equality comparisons are identical to the standard -operations except that the invalid exception should be raised for any -NaN input. -Similarly, the quiet comparison operations should be identical to -their counterparts except that the invalid exception is not raised for -quiet NaNs. -

- -

-Obviously, no comparison operations ever require rounding. -Any rounding mode is ignored. -

- - -

7. Interpreting TestFloat Output

- -

-The “errors” reported by TestFloat programs may or may not really -represent errors in the system being tested. -For each test case tried, the results from the floating-point implementation -being tested could differ from the expected results for several reasons: -

    -
  • -The IEEE Floating-Point Standard allows for some variation in how conforming -floating-point behaves. -Two implementations can sometimes give different results without either being -incorrect. -
  • -The trusted floating-point emulation could be faulty. -This could be because there is a bug in the way the emulation is coded, or -because a mistake was made when the code was compiled for the current system. -
  • -The TestFloat program may not work properly, reporting differences that do not -exist. -
  • -Lastly, the floating-point being tested could actually be faulty. -
-It is the responsibility of the user to determine the causes for the -discrepancies that are reported. -Making this determination can require detailed knowledge about the IEEE -Standard. -Assuming TestFloat is working properly, any differences found will be due to -either the first or last of the reasons above. -Variations in the IEEE Standard that could lead to false error reports are -discussed in section 8, Variations Allowed by the IEEE -Floating-Point Standard. -

- -

-For each reported error (or apparent error), a line of text is written to the -default output. -If a line would be longer than 79 characters, it is divided. -The first part of each error line begins in the leftmost column, and any -subsequent “continuation” lines are indented with a tab. -

- -

-Each error reported is of the form: -

-
-<inputs>  => <observed-output>  expected: <expected-output>
-
-
-The <inputs> are the inputs to the operation. -Each output (observed or expected) is shown as a pair: the result value first, -followed by the exception flags. -

- -

-For example, two typical error lines could be -

-
--00.7FFF00  -7F.000100  => +01.000000 ...ux  expected: +01.000000 ....x
-+81.000004  +00.1FFFFF  => +01.000000 ...ux  expected: +01.000000 ....x
-
-
-In the first line, the inputs are -00.7FFF00 and --7F.000100, and the observed result is +01.000000 -with flags ...ux. -The trusted emulation result is the same but with different flags, -....x. -Items such as -00.7FFF00 composed of a sign character -(+/-), hexadecimal digits, and a single -period represent floating-point values (here 32-bit -single-precision). -The two instances above were reported as errors because the exception flag -results differ. -

- -

-Aside from the exception flags, there are ten data types that may be -represented. -Five are floating-point types: 16-bit half-precision, -32-bit single-precision, 64-bit double-precision, -80-bit double-extended-precision, and 128-bit -quadruple-precision. -The remaining five types are 32-bit and 64-bit -unsigned integers, 32-bit and 64-bit -two’s-complement signed integers, and Boolean values (the results of -comparison operations). -Boolean values are represented as a single character, either a 0 -(false) or a 1 (true). -A 32-bit integer is represented as 8 hexadecimal digits. -Thus, for a signed 32-bit integer, FFFFFFFF is -−1, and 7FFFFFFF is the largest positive value. -64-bit integers are the same except with 16 hexadecimal digits. -

- -

-Floating-point values are written decomposed into their sign, encoded exponent, -and encoded significand. -First is the sign character (+ or -), -followed by the encoded exponent in hexadecimal, then a period -(.), and lastly the encoded significand in hexadecimal. -

- -

-For 16-bit half-precision, notable values include: -

- - - - - - - - - - - - - - - -
+00.000    +0
+0F.000 1
+10.000 2
+1E.3FFmaximum finite value
+1F.000+infinity
 
-00.000−0
-0F.000−1
-10.000−2
-1E.3FFminimum finite value (largest magnitude, but negative)
-1F.000−infinity
-
-Certain categories are easily distinguished (assuming the xs are -not all 0): -
- - - - - - - - -
+00.xxx    positive subnormal numbers
+1F.xxxpositive NaNs
-00.xxxnegative subnormal numbers
-1F.xxxnegative NaNs
-
-

- -

-Likewise for other formats: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
32-bit single64-bit double128-bit quadruple
 
+00.000000    +000.0000000000000    +0000.0000000000000000000000000000    +0
+7F.000000+3FF.0000000000000+3FFF.0000000000000000000000000000 1
+80.000000+400.0000000000000+4000.0000000000000000000000000000 2
+FE.7FFFFF+7FE.FFFFFFFFFFFFF+7FFE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFmaximum finite value
+FF.000000+7FF.0000000000000+7FFF.0000000000000000000000000000+infinity
 
-00.000000    -000.0000000000000    -0000.0000000000000000000000000000    −0
-7F.000000-3FF.0000000000000-3FFF.0000000000000000000000000000−1
-80.000000-400.0000000000000-4000.0000000000000000000000000000−2
-FE.7FFFFF-7FE.FFFFFFFFFFFFF-7FFE.FFFFFFFFFFFFFFFFFFFFFFFFFFFFminimum finite value
-FF.000000-7FF.0000000000000-7FFF.0000000000000000000000000000−infinity
 
+00.xxxxxx+000.xxxxxxxxxxxxx+0000.xxxxxxxxxxxxxxxxxxxxxxxxxxxxpositive subnormals
+FF.xxxxxx+7FF.xxxxxxxxxxxxx+7FFF.xxxxxxxxxxxxxxxxxxxxxxxxxxxxpositive NaNs
-00.xxxxxx-000.xxxxxxxxxxxxx-0000.xxxxxxxxxxxxxxxxxxxxxxxxxxxxnegative subnormals
-FF.xxxxxx-7FF.xxxxxxxxxxxxx-7FFF.xxxxxxxxxxxxxxxxxxxxxxxxxxxxnegative NaNs
-
-

- -

-The 80-bit double-extended-precision values are a little unusual -in that the leading bit of precision is not hidden as with other formats. -When canonically encoded, the leading significand bit of an 80-bit -double-extended-precision value will be 0 if the value is zero or subnormal, -and will be 1 otherwise. -Hence, the same values listed above appear in 80-bit -double-extended-precision as follows (note the leading 8 digit in -the significands): -

- - - - - - - - - - - - - - - - - - - - - -
+0000.0000000000000000    +0
+3FFF.8000000000000000 1
+4000.8000000000000000 2
+7FFE.FFFFFFFFFFFFFFFFmaximum finite value
+7FFF.8000000000000000+infinity
 
-0000.0000000000000000−0
-3FFF.8000000000000000−1
-4000.8000000000000000−2
-7FFE.FFFFFFFFFFFFFFFFminimum finite value
-7FFF.8000000000000000−infinity
-
-

- -

-Lastly, exception flag values are represented by five characters, one character -per flag. -Each flag is written as either a letter or a period (.) according -to whether the flag was set or not by the operation. -A period indicates the flag was not set. -The letter used to indicate a set flag depends on the flag: -

- - - - - - - - - - - - -
v    invalid exception
iinfinite exception (“divide by zero”)
ooverflow exception
uunderflow exception
xinexact exception
-
-For example, the notation ...ux indicates that the -underflow and inexact exception flags were set and that the other -three flags (invalid, infinite, and overflow) were not -set. -The exception flags are always written following the value returned as the -result of the operation. -

- - -

8. Variations Allowed by the IEEE Floating-Point Standard

- -

-The IEEE Floating-Point Standard admits some variation among conforming -implementations. -Because TestFloat expects the two implementations being compared to deliver -bit-for-bit identical results under most circumstances, this leeway in the -standard can result in false errors being reported if the two implementations -do not make the same choices everywhere the standard provides an option. -

- -

8.1. Underflow

- -

-The standard specifies that the underflow exception flag is to be raised -when two conditions are met simultaneously: -(1) tininess and (2) loss of accuracy. -

- -

-A result is tiny when its magnitude is nonzero yet smaller than any normalized -floating-point number. -The standard allows tininess to be determined either before or after a result -is rounded to the destination precision. -If tininess is detected before rounding, some borderline cases will be flagged -as underflows even though the result after rounding actually lies within the -normal floating-point range. -By detecting tininess after rounding, a system can avoid some unnecessary -signaling of underflow. -All the TestFloat programs support options -tininessbefore and --tininessafter to control whether TestFloat expects tininess on -underflow to be detected before or after rounding. -One or the other is selected as the default when TestFloat is compiled, but -these command options allow the default to be overridden. -

- -

-Loss of accuracy occurs when the subnormal format is not sufficient to -represent an underflowed result accurately. -The original 1985 version of the IEEE Standard allowed loss of accuracy to be -detected either as an inexact result or as a -denormalization loss; -however, few if any systems ever chose the latter. -The latest standard requires that loss of accuracy be detected as an inexact -result, and TestFloat can test only for this case. -

- -

8.2. NaNs

- -

-The IEEE Standard gives the floating-point formats a large number of NaN -encodings and specifies that NaNs are to be returned as results under certain -conditions. -However, the standard allows an implementation almost complete freedom over -which NaN to return in each situation. -

- -

-By default, TestFloat does not check the bit patterns of NaN results. -When the result of an operation should be a NaN, any NaN is considered as good -as another. -This laxness can be overridden with the -checkNaNs option of -programs testfloat_ver and testfloat. -In order for this option to be sensible, TestFloat must have been compiled so -that its internal floating-point implementation (SoftFloat) generates the -proper NaN results for the system being tested. -

- -

8.3. Conversions to Integer

- -

-Conversion of a floating-point value to an integer format will fail if the -source value is a NaN or if it is too large. -The IEEE Standard does not specify what value should be returned as the integer -result in these cases. -Moreover, according to the standard, the invalid exception can be raised -or an unspecified alternative mechanism may be used to signal such cases. -

- -

-TestFloat assumes that conversions to integer will raise the invalid -exception if the source value cannot be rounded to a representable integer. -In such cases, TestFloat expects the result value to be the largest-magnitude -positive or negative integer or zero, as detailed earlier in -section 6.1, Conversion Operations. -If option -checkInvInts is selected with programs -testfloat_ver and testfloat, integer results of -invalid operations are checked for an exact match. -In order for this option to be sensible, TestFloat must have been compiled so -that its internal floating-point implementation (SoftFloat) generates the -proper integer results for the system being tested. -

- - -

9. Contact Information

- -

-At the time of this writing, the most up-to-date information about TestFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - - - diff --git a/addins/TestFloat-3e/doc/TestFloat-history.html b/addins/TestFloat-3e/doc/TestFloat-history.html deleted file mode 100644 index 8de782cad..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-history.html +++ /dev/null @@ -1,272 +0,0 @@ - - - - -Berkeley TestFloat History - - - - -

History of Berkeley TestFloat, to Release 3e

- -

-John R. Hauser
-2018 January 20
-

- - -

-Releases of Berkeley TestFloat normally parallel those of Berkeley SoftFloat, -on which TestFloat is based. -Each TestFloat release necessarily incorporates all bug fixes from the -corresponding release of SoftFloat. -

- - -

Release 3e (2018 January)

- -
    - -
  • -Fixed a problem with the all-in-one testfloat program whereby -function set -all1 incorrectly also tested the three-operand fused -multiply-add operations. - -
  • -Modified the expected behavior of rounding mode odd (jamming) when -rounding to an integer value (either conversion to an integer format or a -‘roundToInt’ function). -Previously, for those cases only, rounding mode odd was expected -to act the same as rounding to minimum magnitude. -Now, when rounding to an integer value, the nearest odd integer is expected, -consistent with the round-to-odd result of other operations. - -
  • -Added options -checkInvInts and -checkAll to programs -testfloat_ver and testfloat. - -
  • -Improved the checking of integer results of invalid operations. - -
- - -

Release 3d (2017 August)

- -
    - -
  • -When the all-in-one testfloat program is compiled to test the C -language’s arithmetic, added the ability to test library functions -sqrtf, sqrtl, fmaf, fma, -and fmal, which were added to the C Standard in 1999. - -
- - -

Release 3c (2017 February)

- -
    - -
  • -Added support for testing rounding mode odd (jamming). - -
  • -Made support for testing 64-bit double-precistion floating-point -be subject to macro FLOAT64 (akin to macros FLOAT16, -EXTFLOAT80, and FLOAT128 from before). - -
  • -Fixed some bugs that caused compilation to fail with certain combinations of -option macro settings. - -
  • -Corrected the types of two internal variables to be sig_atomic_t -instead of bool. - -
  • -Improved the formatting of some error reports (concerning where lines are -broken when they exceed 79 characters in length). - -
- - -

Release 3b (2016 July)

- -
    - -
  • -Added the ability to test the common 16-bit -“half-precision” floating-point format. - -
  • -Added a -seed option to programs testfloat_gen, -testfloat, and testsoftfloat for setting the seed for -the pseudo-random number generator used to generate test cases. - -
  • -Where a specific choice is needed for how tininess is detected on underflow, -changed the default to be the detection of tininess after rounding -(-tininessafter) instead of before rounding -(-tininessbefore). - -
  • -Modified the format of reported discrepancies to show the signs of -floating-point values using + and - characters. - -
  • -Documented the use of the INLINE macro, and fixed the sources for -the case that function inlining is not supported by the C compiler. - -
  • -Documented the possible need to define macro THREAD_LOCAL to match -how the SoftFloat library was built. - -
  • -Modified the provided Makefiles to allow some options to be overridden from the -make command. - -
- - -

Release 3a (2015 October)

- -
    - -
  • -Replaced the license text supplied by the University of California, Berkeley, -and fixed some minor build problems. - -
- - -

Release 3 (2015 February)

- -
    - -
  • -Complete rewrite, funded by the University of California, Berkeley, and -consequently having a different use license than earlier releases. -Visible changes included different names for testable functions and command -options. - -
  • -Reinstated separate programs for generating test cases -(testfloat_ver) and verifying test results -(testfloat_gen), as alternatives to the all-in-one -testfloat program (which remained supported). - -
  • -Added support for testing conversions between floating-point and unsigned -integers, both 32-bit and 64-bit. - -
  • -Added support for testing a fused multiply-add operation, for all testable -floating-point formats except 80-bit double-extended-precision. - -
  • -Added support for testing a fifth rounding mode, near_maxMag -(round to nearest, with ties to maximum magnitude, away from zero). - -
  • -Added timesoftfloat (previously found in the Berkeley SoftFloat -package). - -
- - -

Release 2c (2015 January)

- -
    - -
  • -Fixed mistakes affecting some 64-bit processors. - -
  • -Made minor updates to the documentation, including improved wording for the -legal restrictions on using TestFloat releases through 2c (not -applicable to Release 3 or later). - -
- - -

-There was never a Release 2b. -

- - -

Release 2a (1998 December)

- -
    - -
  • -Added support for testing conversions between floating-point and -64-bit signed integers. - -
  • -Improved the Makefiles. - -
- - -

Release 2 (1997 June)

- -
    - -
  • -Integrated the generation of test cases and the checking of system results into -a single program. -(Before they were separate programs, normally joined by explicit command-line -pipes.) - -
  • -Improved the sequence of test cases. - -
  • -Added support for testing 80-bit double-extended-precision and -128-bit quadruple precision. - -
  • -Made program output more readable, and added new command arguments. - -
  • -Reduced dependence on the quality of the standard rand function -for generating test cases. -(Previously naively expected rand to be able to generate good -random bits for the entire machine word width.) - -
  • -Created testsoftfloat, with its own simpler complete software -floating-point (“slowfloat”) for comparison purposes. - -
  • -Made some changes to the source file structure, including renaming -environment.h to milieu.h (to avoid confusion with -environment variables). - -
- - -

Release 1a (1996 July)

- -
    - -
  • -Added the -tininessbefore and -tininessafter options -to control whether tininess should be detected before or after rounding. - -
- - -

Release 1 (1996 July)

- -
    - -
  • -Original release. - -
- - - - diff --git a/addins/TestFloat-3e/doc/TestFloat-source.html b/addins/TestFloat-3e/doc/TestFloat-source.html deleted file mode 100644 index ec3a4b47d..000000000 --- a/addins/TestFloat-3e/doc/TestFloat-source.html +++ /dev/null @@ -1,639 +0,0 @@ - - - - -Berkeley TestFloat Source Documentation - - - - -

Berkeley TestFloat Release 3e: Source Documentation

- -

-John R. Hauser
-2018 January 20
-

- - -

Contents

- -
- --- - - - - - - - - - - - - - - -
1. Introduction
2. Limitations
3. Acknowledgments and License
4. TestFloat Package Directory Structure
5. Dependence on Berkeley SoftFloat
6. Issues for Porting TestFloat to a New Target
6.1. Standard Headers <stdbool.h> and - <stdint.h>
6.2. Standard Header <fenv.h>
6.3. Macros for Build Options
6.4. Specializing the testfloat Program
6.5. Improving the Random Number Functions
7. Contact Information
-
- - -

1. Introduction

- -

-This document gives information needed for compiling and/or porting Berkeley -TestFloat, a small collection of programs for testing that an implementation of -binary floating-point conforms to the IEEE Standard for Floating-Point -Arithmetic. -For basic documentation about TestFloat refer to -TestFloat-general.html. -

- -

-The source code for TestFloat is intended to be relatively machine-independent. -Most programs in the TestFloat package should be compilable with any -ISO-Standard C compiler that also supports 64-bit integers. -If the all-in-one testfloat program will be used to test a new -floating-point implementation, additional effort will likely be required to -retarget that program to invoke the new floating-point operations. -TestFloat has been successfully compiled with the GNU C Compiler -(gcc) for several platforms. -

- -

-Release 3 of TestFloat was a complete rewrite relative to -Release 2c or earlier. -The current version of TestFloat is Release 3e. -

- -

-TestFloat depends on Berkeley SoftFloat, which is a software implementation of -binary floating-point that conforms to the IEEE Standard for Floating-Point -Arithmetic. -SoftFloat is not included with the TestFloat sources. -It can be obtained from the Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -

- - -

2. Limitations

- -

-TestFloat assumes the computer has an addressable byte size of either 8 or -16 bits. -(Nearly all computers in use today have 8-bit bytes.) -

- -

-TestFloat is written entirely in C. -The C compiler used must conform at a minimum to the 1989 ANSI standard for the -C language (same as the 1990 ISO standard) and must in addition support basic -arithmetic on 64-bit integers. -Earlier releases of TestFloat were capable of testing 32-bit -single-precision and 64-bit double-precision floating-point -without requiring compiler support for 64-bit integers, but this -option is not supported starting with Release 3. -Since 1999, ISO standards for C have mandated compiler support for -64-bit integers. -A compiler conforming to the 1999 C Standard or later is recommended but not -strictly required. -

- -

-C Standard header files <stdbool.h> and -<stdint.h> are required for defining standard Boolean and -integer types. -If these headers are not supplied with the C compiler, minimal substitutes must -be provided. -TestFloat’s dependence on these headers is detailed later in -section 6.1, Standard Headers <stdbool.h> -and <stdint.h>. -

- - -

3. Acknowledgments and License

- -

-The TestFloat package was written by me, John R. Hauser. -Release 3 of TestFloat was a completely new implementation -supplanting earlier releases. -The project to create Release 3 (now through 3e) was -done in the employ of the University of California, Berkeley, within the -Department of Electrical Engineering and Computer Sciences, first for the -Parallel Computing Laboratory (Par Lab) and then for the ASPIRE Lab. -The work was officially overseen by Prof. Krste Asanovic, with funding provided -by these sources: -

- ---- - - - - - - - - - -
Par Lab: -Microsoft (Award #024263), Intel (Award #024894), and U.C. Discovery -(Award #DIG07-10227), with additional support from Par Lab affiliates Nokia, -NVIDIA, Oracle, and Samsung. -
ASPIRE Lab: -DARPA PERFECT program (Award #HR0011-12-2-0016), with additional support from -ASPIRE industrial sponsor Intel and ASPIRE affiliates Google, Nokia, NVIDIA, -Oracle, and Samsung. -
-
-

- -

-The following applies to the whole of TestFloat Release 3e as well -as to each source file individually. -

- -

-Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. -All rights reserved. -

- -

-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: -

    - -
  1. -

    -Redistributions of source code must retain the above copyright notice, this -list of conditions, and the following disclaimer. -

    - -
  2. -

    -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions, and the following disclaimer in the documentation and/or -other materials provided with the distribution. -

    - -
  3. -

    -Neither the name of the University nor the names of its contributors may be -used to endorse or promote products derived from this software without specific -prior written permission. -

    - -
-

- -

-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS “AS IS”, -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. -IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, -INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE -OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -

- - -

4. TestFloat Package Directory Structure

- -

-Because TestFloat is targeted to multiple platforms, its source code is -slightly scattered between target-specific and target-independent directories -and files. -The supplied directory structure is as follows: -

-
-doc
-source
-    subj-C
-build
-    template
-    Linux-386-GCC
-    Linux-386-SSE2-GCC
-    Linux-x86_64-GCC
-    Linux-ARM-VFPv2-GCC
-    Win32-MinGW
-    Win32-SSE2-MinGW
-    Win64-MinGW-w64
-
-
-The majority of the TestFloat sources are provided in the source -directory. -The subj-C subdirectory contains the sources that -configure the all-in-one testfloat program to test the C -compiler’s implementation of the standard C types float, -double, and possibly long double. -The ‘subj’ in subj-C is an -abbreviation of subject, referring to the floating-point that is the -subject of the test. -If testfloat is retargeted to test other floating-point -implementations, the corresponding source files would be expected to be in -other subdirectories alongside subj-C, with names of -the form subj-<target>. -More about retargeting testfloat is found in -section 6.4, Specializing the testfloat -Program. -

- -

-The build directory is intended to contain a subdirectory for each -target platform for which builds of the TestFloat programs may be created. -For each build target, the target’s subdirectory is where all derived -object files and the completed TestFloat executables are created. -The template subdirectory is not an actual build target but -contains sample files for creating new target directories. -

- -

-Ignoring the template directory, the supplied target directories -are intended to follow a naming system of -<execution-environment>-<compiler>. -For the example targets, -<execution-environment> is -Linux-386, Linux-386-SSE2, -Linux-x86_64, -Linux-ARM-VFPv2, Win32, -Win32-SSE2, or Win64, and -<compiler> is GCC, -MinGW, or MinGW-w64. -

- -

-All of the supplied target directories are merely examples that may or may not -be correct for compiling on any particular system. -There are currently no plans to include and maintain in the TestFloat package -the build files needed for a great many users’ compilation environments, -which can span a huge range of operating systems, compilers, and other tools. -

- -

-As supplied, each target directory contains two files: -

-
-Makefile
-platform.h
-
-
-The provided Makefile is written for GNU make. -A build of TestFloat for the specific target is begun by executing the -make command with the target directory as the current directory. -A completely different build tool can be used if an appropriate -Makefile equivalent is created. -

- -

-The platform.h header file exists to provide a location for -additional C declarations specific to the build target. -Every C source file of TestFloat contains a #include for -platform.h. -In many cases, the contents of platform.h can be as simple as one -or two lines of code. -If the target’s compiler or library has bugs or other shortcomings, -workarounds for these issues may be possible with target-specific declarations -in platform.h, without the need to modify the main TestFloat -sources. -

- -

-It may not be necessary to build all of the TestFloat programs. -For testing a floating-point implementation, typically -testfloat_gen and testfloat will not both be used, -and testfloat_ver may not be needed either. -The Makefile (or equivalent) can be modified not to create unneeded programs. -This may be especially relevant for the all-in-one test program -testfloat, which might not build without special attention. -

- - -

5. Dependence on Berkeley SoftFloat

- -

-In addition to the distributed sources, TestFloat depends on the existence of a -compatible Berkeley SoftFloat library and the corresponding header file -softfloat.h. -As mentioned earlier, SoftFloat is a separate package available at Web page -http://www.jhauser.us/arithmetic/SoftFloat.html. -The SoftFloat library must be compiled before the TestFloat programs can be -built. -In the example Makefiles, the locations of the SoftFloat header files and -pre-compiled library are specified by these macros: -

-
-
SOFTFLOAT_INCLUDE_DIR -
-The path of the directory containing softfloat.h, as well as other -nonstandard header files referenced by softfloat.h, if any. -
SOFTFLOAT_H -
-A list of the full paths of all SoftFloat header files needed by SoftFloat -clients. This list must include softfloat.h and may also include -other header files referenced by softfloat.h, such as -softfloat_types.h. -This macro is used only to establish build dependencies between the SoftFloat -header files and TestFloat’s source files, in case the SoftFloat header -files are changed. -
SOFTFLOAT_LIB -
-The full path of the compiled SoftFloat library (usually -softfloat.a or libsoftfloat.a). -
-
-

- - -

6. Issues for Porting TestFloat to a New Target

- -

6.1. Standard Headers <stdbool.h> and <stdint.h>

- -

-The TestFloat sources make use of standard headers -<stdbool.h> and <stdint.h>, which have -been part of the ISO C Standard Library since 1999. -With any recent compiler, these standard headers are likely to be supported, -even if the compiler does not claim complete conformance to the latest ISO C -Standard. -For older or nonstandard compilers, substitutes for -<stdbool.h> and <stdint.h> may need to be -created. -TestFloat depends on these names from <stdbool.h>: -

-
-bool
-true
-false
-
-
-and on these names from <stdint.h>: -
-
-uint16_t
-uint32_t
-uint64_t
-int32_t
-int64_t
-UINT64_C
-INT64_C
-uint_least8_t
-uint_fast8_t
-uint_fast16_t
-uint_fast32_t
-uint_fast64_t
-int_fast8_t
-int_fast16_t
-int_fast32_t
-int_fast64_t
-
-
-

- - -

6.2. Standard Header <fenv.h>

- -

-Because the supplied all-in-one testfloat program tests the -floating-point operations of the C language, it uses the facilities provided by -standard C header <fenv.h> to access the floating-point -environment of C, in particular to set the rounding mode and to access the -floating-point exception flags. -Like <stdbool.h> and <stdint.h>, -<fenv.h> has been part of the ISO C Standard Library since -1999, but older or nonstandard C compilers may not support it. -

- -

-Some form of standard header <fenv.h> is needed only if the -testfloat program is wanted and the program will not be -retargeted to invoke a floating-point implementation in a way that bypasses the -standard C environment. -Typically, if testfloat is wanted, it will be retargeted to invoke -a new floating-point implementation directly, making -<fenv.h> irrelevant. -For more about retargeting testfloat, see section 6.4 -below, Specializing the testfloat Program. -

- - -

6.3. Macros for Build Options

- -

-The TestFloat source files are affected by several C preprocessor macros: -

-
-
LITTLEENDIAN -
-Must be defined for little-endian machines; -must not be defined for big-endian machines. -
INLINE -
-Can be defined to a sequence of tokens used to indicate that a C function -should be inlined. -If the compiler does not support the inlining of functions, this macro must not -be defined. -For compilers that conform to the C Standard’s rules for inline -functions, this macro can be defined as the single keyword inline. -For other compilers that follow a convention pre-dating the standardization of -inline, this macro may need to be defined to extern -inline. -
THREAD_LOCAL -
-Can be defined to a sequence of tokens that, when appearing at the start of a -variable declaration, indicates to the C compiler that the variable is -per-thread, meaning that each execution thread gets its own separate -instance of the variable. -This macro is used in the supplied version of Berkeley SoftFloat’s header -softfloat.h, in the declarations of variables -softfloat_roundingMode, softfloat_detectTininess, -extF80_roundingPrecision, and -softfloat_exceptionFlags. -To use the supplied, unmodified header softfloat.h, this macro -must be defined (or not defined) the same as when the SoftFloat library was -built. -
-
-
FLOAT16 -
-Must be defined if the TestFloat programs are to support the -16-bit half-precision floating-point format. -
FLOAT64 -
-Must be defined if the TestFloat programs are to support the -64-bit double-precision floating-point format. -
EXTFLOAT80 -
-Must be defined if the TestFloat programs are to support the -80-bit double-extended-precision floating-point format. -
FLOAT128 -
-Must be defined if the TestFloat programs are to support the -128-bit quadruple-precision floating-point format. -
FLOAT_ROUND_ODD -
-Must be defined if the TestFloat programs are to support rounding to odd -(jamming). -To be useful, this option also requires that the Berkeley SoftFloat library was -compiled with macro SOFTFLOAT_ROUND_ODD defined. -
-
-Following the usual custom for C, for all the macros except -INLINE and THREAD_LOCAL, the content of a -macro’s definition is irrelevant; -what matters is a macro’s effect on #ifdef directives. -

- -

-It is recommended that any definition of macros LITTLEENDIAN, -INLINE, and THREAD_LOCAL be made in a build -target’s platform.h header file, because these macros are -expected to be determined inflexibly by the target machine and compiler. -The other five macros select build options, and hence might be better located -in the target’s Makefile (or its equivalent). -

- - -

6.4. Specializing the testfloat Program

- -

-The supplied sources for the all-in-one testfloat program cause -testfloat to test the C compiler’s float and -double types for C operations +, -, -*, /, etc. -The supplied version is also capable of testing C type long -double if the sources are compiled with one of these macros -defined: -

-
-
LONG_DOUBLE_IS_EXTFLOAT80 -
-Indicates that type long double is -80-bit double-extended-precision floating-point. -
LONG_DOUBLE_IS_FLOAT128 -
-Indicates that type long double is -128-bit quadruple-precision floating-point. -
-
-By default, testfloat assumes that only the IEEE Standard’s -original four rounding modes (near_even, minMag, -min, and max) are supported by the floating-point -being tested. -For other rounding modes, additional macro can be defined: -
-
-
SUBJFLOAT_ROUND_NEAR_MAXMAG -
-Indicates that the subject floating-point supports rounding mode -near_maxMag (nearest/away). -
SUBJFLOAT_ROUND_ODD -
-Indicates that the subject floating-point supports rounding mode -odd (jamming). -
-
-

- -

-To test a new and/or different implementation of floating-point, -testfloat must normally be retargeted to invoke this other -floating-point instead of C’s floating-point. -Two source files define the functions that testfloat uses to -invoke floating-point operations for testing: -

-
-subjfloat_config.h
-subjfloat.c
-
-
-For the default target of testing C’s floating-point, these files are -contained in directory source/subj-C as discussed -earlier. -For a different subject floating-point, it is recommended that appropriate -versions of subjfloat_config.h and subjfloat.c be -stored in a sibling subj-<target> -directory, where <target> names the particular -target. -

- -

-Header file subjfloat_config.h defines a macro of the form -SUBJ_* for each subject function supported. -For example, if function subj_f32_add exists to perform -32-bit floating-point addition, then -subjfloat_config.h should have a definition for macro -SUBJ_F32_ADD. -The actual function subj_f32_add is expected to be defined in -subjfloat.c, along with all other subject functions. -A common header file, subjfloat.h, (not target-specific) provides -prototype declarations for all possible subject functions that -testfloat may be compiled to test, whether actually existing or -not. -(There is no penalty for the header to declare prototypes of nonexistent -functions that are never called.) -For a specific build of testfloat, the -list option -will list all subject functions that the testfloat program is able -to invoke and thus test. -

- -

-In the source code as supplied, macros LONG_DOUBLE_IS_EXTFLOAT80 -and LONG_DOUBLE_IS_FLOAT128 affect only the target-specific source -files in source/subj-C, so these macros can be -ignored for any other subject floating-point that does not depend on them. -On the other hand, macros SUBJFLOAT_ROUND_NEAR_MAXMAG and -SUBJFLOAT_ROUND_ODD always determine whether the -testfloat program attempts to test rounding modes -near_maxMag and odd, regardless of the subject -floating-point. -

- - -

6.5. Improving the Random Number Functions

- -

-If you are serious about using TestFloat for testing floating-point, you should -consider replacing the random number functions in random.c. -The supplied random number functions are built on top of the standard C -rand function. -Because function rand is rather poor on some systems, the -functions in random.c assume very little about the quality of -rand. -As a result, rand is called more frequently than it might need to -be, shortening the time before random number sequences repeat, and possibly -wasting time as well. -If rand is better on a given target platform, or if another, -better random number generator is available (such as rand48 on -UNIX-derived systems), TestFloat can be improved by overriding the given -random.c with a target-specific one. -

- -

-Rather than modifying the supplied file random.c, it is -recommended instead that a new, alternate file be created and the -target’s Makefile be modified to refer to that alternate file in place of -random.c. -

- - -

7. Contact Information

- -

-At the time of this writing, the most up-to-date information about TestFloat -and the latest release can be found at the Web page -http://www.jhauser.us/arithmetic/TestFloat.html. -

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat.html b/addins/TestFloat-3e/doc/testfloat.html deleted file mode 100644 index 34313cbba..000000000 --- a/addins/TestFloat-3e/doc/testfloat.html +++ /dev/null @@ -1,286 +0,0 @@ - - - - -testfloat - - - - -

Berkeley TestFloat Release 3e: testfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat program tests an implementation of floating-point -arithmetic for conformity to the IEEE Standard for Binary Floating-Point -Arithmetic. -testfloat is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-The testfloat program is an all-in-one tool for testing -floating-point arithmetic. -It generates test operand values, invokes a floating-point operation with the -generated operands, and examines the corresponding computed results, reporting -unexpected results as likely errors. -While the processes of generating inputs and examining results are generic, a -particular build of testfloat is limited to testing only the one -implementation of floating-point it has been compiled to invoke. -For example, while one instance of testfloat might be compiled to -execute a computer’s hardware instruction for floating-point addition, a -different version might be compiled to call a subroutine called -myAddFloat that is linked into the testfloat program. -To test a new implementation of floating-point (a new set of machine -instructions or a new set of subroutines), a new testfloat must be -compiled containing the code needed to invoke the new floating-point. -

- -

-The default build of testfloat assumes that C types -float and double are 32-bit and -64-bit binary floating-point types conforming to the IEEE -Standard, and tests the C operations of +, -, -*, /, type conversions, etc. -This tests the floating-point arithmetic seen by C programs. -Depending on the compiler and the options selected during compilation, this may -or may not be the same as the computer’s floating-point hardware, if any. -

- -

-The testfloat program will ordinarily test an operation for all -five rounding modes defined by the IEEE Floating-Point Standard, one after the -other, plus possibly a sixth mode, round to odd (depending on the -options selected when testfloat was compiled). -If the rounding mode is not supposed to have any affect on the -results—for instance, some operations do not require rounding—only -the nearest/even rounding mode is checked. -For double-extended-precision operations affected by rounding precision -control, testfloat also tests all three rounding precision modes, -one after the other. -Testing can be limited to a single rounding mode and/or rounding precision with -appropriate command-line options. -

- -

-For more about the operation of testfloat and how to interpret its -output, refer to -TestFloat-general.html. -

- - -

Command Syntax

- -

-The testfloat program is executed as a command with this syntax: -

-
-testfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable operation -or a function set. -The available options and function sets are documented below. -The -list option can be used to obtain a list of all testable -operations for a given build of testfloat. -If testfloat is executed without any arguments, a summary of usage -is written. -

- - -

Options

- -

-The testfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-list

- -

-The -list option causes a list of testable operations to be -written, after which the program exits. -An operation is testable by testfloat if the program knows some -way to invoke the operation. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same compiled testfloat program with the same -arguments (including the same pseudo-random number seed) should always perform -the same sequence of tests, whereas changing the pseudo-random number seed -should result in a different sequence of tests. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 performs many more tests than level 1 and thus can reveal -bugs not found by level 1. -

- -

-errors <num>

- -

-The -errors option instructs testfloat to report no -more than the specified number of errors for any combination of operation, -rounding mode, etc. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, -testfloat ends the current test and begins the next one, if any. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testfloat to report every error it finds. -

- -

-errorstop

- -

-The -errorstop option causes the program to exit after the first -operation for which any errors are reported. -

- -

-forever

- -

-The -forever option causes a single operation to be repeatedly -tested. -Only one rounding mode and/or rounding precision can be tested in a single -execution. -If not specified, the rounding mode defaults to nearest/even. -For 80-bit double-extended-precision operations, the rounding -precision defaults to full double-extended precision. -The testing level is set to 2 by this option. -

- -

-checkNaNs

- -

-The -checkNaNs option causes testfloat to verify the -bitwise correctness of NaN results. -In order for this option to be sensible, testfloat must have been -compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper NaN results for the system being -tested. -

- -

-checkInvInts

- -

-The -checkInvInts option causes testfloat to verify -the bitwise correctness of integer results of invalid operations. -In order for this option to be sensible, testfloat must have been -compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper integer results for the system being -tested. -

- -

-checkAll

- -

-Enables both -checkNaNs and -checkInvInts. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision operations affected by -rounding precision control, the -precision32 option restricts -testing to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -The other rounding precision choices are not tested. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision, and --precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-The precision-control options may not be supported at all if no -double-extended-precision operations are testable. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts testing to only the cases in -which the rounding mode is nearest/even. -The other rounding mode choices are not tested. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round, -or that have the rounding mode included in the function name (such as -f32_to_i32_r_near_maxMag). -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option indicates that the floating-point -implementation being tested detects tininess on underflow before rounding. -The -tininessafter option indicates that tininess is detected -after rounding. -The testfloat program alters its expectations accordingly. -These options override the default selected when testfloat was -compiled. -Choosing the wrong one of these two options should cause error reports for some -(but not all) operations. -

- - -

Function Sets

- -

-Just as testfloat can test an operation for all five or six -rounding modes in sequence, multiple operations can be tested with a single -execution of testfloat. -Two sets are recognized: -all1 and -all2. -The set -all1 is all one-operand operations, while --all2 is all two-operand operations. -A function set is used in place of an operation name in the -testfloat command line, such as -

-
-testfloat [<option>...] -all1
-
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat_gen.html b/addins/TestFloat-3e/doc/testfloat_gen.html deleted file mode 100644 index dfc5abe02..000000000 --- a/addins/TestFloat-3e/doc/testfloat_gen.html +++ /dev/null @@ -1,367 +0,0 @@ - - - - -testfloat_gen - - - - -

Berkeley TestFloat Release 3e: testfloat_gen

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat_gen program generates test cases for testing that an -implementation of floating-point arithmetic conforms to the IEEE Standard for -Binary Floating-Point Arithmetic. -testfloat_gen is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-A single execution of testfloat_gen generates test cases for only -a single floating-point operation and associated options. -The testfloat_gen program must be repeatedly executed to generate -test cases for each operation to be tested. -

- -

-The testfloat_gen program writes the test cases it generates to -standard output. -This output can either be captured in a file through redirection, or be piped -to another program that exercises a floating-point operation using the test -cases as they are supplied. -Depending on use, the total output from testfloat_gen can be -large, so piping to another program may be the best choice to avoid using -inordinate file space. -The format of testfloat_gen’s output is raw hexadecimal -text, described in the section below titled Output Format. -

- - -

Command Syntax

- -

-The testfloat_gen program is executed as a command in one of these -forms: -

-
-testfloat_gen [<option>...] <type>
-testfloat_gen [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, and -<option> is a supported option, documented below. -A testfloat_gen command expects either a -<type> specifying the type and number of outputs or a -<function> naming a floating-point operation. -If testfloat_gen is executed without any arguments, a summary of -usage is written. -

- -

-A <type> can be one of the following: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ui32unsigned 32-bit integers
ui64unsigned 64-bit integers
i32signed 32-bit integers
i64signed 64-bit integers
f16 [<num>]one or more 16-bit half-precision floating-point values
f32 [<num>]one or more 32-bit single-precision floating-point values
f64 [<num>]one or more 64-bit double-precision floating-point values
extF80 [<num>]   one or more 80-bit double-extended-precision floating-point -values
f128 [<num>]one or more 128-bit quadruple-precision floating-point -values
-
-Optional <num> is one of 1, 2, or 3. -If a <type> is given without -<num> (such as ui32 or -f64), testfloat_gen outputs a list of values of the -specified type, one value per line, appropriate for testing a floating-point -operation with exactly one operand of the given type. -If a floating-point type and number are given (such as -f32 2 or -extF80 1), testfloat_gen -outputs the specified number of values per line, appropriate for testing a -floating-point operation with that number of operands. -Although the exact operation being tested is not specified, the test cases -output by testfloat_gen cover all standard floating-point -operations, to the degree explained in -TestFloat-general.html. -

- -

-If a <function> operation name is given, then each -line of output from testfloat_gen contains not only the operands -for that operation (as would be generated by an appropriate -<type> argument) but also the expected results as -determined by testfloat_gen’s internal floating-point -emulation (Berkeley SoftFloat). -The available operation names are listed in -TestFloat-general.html. -In all cases, floating-point operations have two results: -first, a value, which may be floating-point, integer, or Boolean, and, second, -the floating-point exception flags raised by the operation. -If the output from a tested floating-point operation does not match the -expected output specified by testfloat_gen, this may or may not -indicate an error in the floating-point operation. -For further explanation, see -TestFloat-general.html, -especially the section titled Variations Allowed by the IEEE Floating-Point -Standard. -

- - -

Options

- -

-The testfloat_gen program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-prefix <text>

- -

-The -prefix option causes testfloat_gen to write the -supplied text argument verbatim as the first line of output before any test -cases. -This can be used, for example, to indicate to a downstream program what kind of -test to perform for the test cases that follow. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same testfloat_gen program with the same arguments -(including the same pseudo-random number seed) should always generate the same -sequence of test cases, whereas changing the pseudo-random number seed should -result in a different sequence of test cases. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 causes many more test cases to be generated, with better -coverage, than level 1. -

- -

-n <num>

- -

-Option -n specifies the number of test cases to generate. -For each <type> or -<function> and each testing level (set by --level), there is a minimum value that testfloat_gen -will accept for <num>. -If no -n option is given, the number of test cases generated by -testfloat_gen equals the minimum value acceptable for the --n argument. -Option -n cannot be used to reduce this number, but can increase -it, without changing the testing level. -

- -

-forever

- -

-The -forever option causes test cases to be generated -indefinitely, without limit (until the program is terminated by some external -cause). -The testing level is set to 2 by this option. -

- -

-precision32, -precision64, -precision80

- -

-When a <function> is specified that is an -80-bit double-extended-precision operation affected by rounding -precision control, the -precision32 option sets the rounding -precision to 32 bits, equivalent to 32-bit -single-precision. -Likewise, -precision64 sets the rounding precision to -64 bits, equivalent to 64-bit double-precision, and --precision80 sets the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -When rounding precision is applicable but not specified, the default is the -full 80 bits, same as -precision80. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-When a <function> is specified that requires -rounding, the -rnear_even option sets the rounding mode to -nearest/even; --rnear_maxMag sets rounding to nearest/maximum magnitude -(nearest-away); --rminMag sets rounding to minimum magnitude (toward zero); --rmin sets rounding to minimum (down, toward negative infinity); --rmax sets rounding to maximum (up, toward positive infinity); -and -rodd, if supported, sets rounding to odd. -These options are ignored for operations that are exact and thus do not round. -When rounding mode is relevant but not specified, the default is to round to -nearest/even, same as -rnear_even. -

- -

-tininessbefore, -tininessafter

- -

-When a <function> is specified that requires -rounding, the -tininessbefore option indicates that tininess on -underflow will be detected before rounding, while -tininessafter -indicates that tininess on underflow will be detected after rounding. -These options are ignored for operations that are exact and thus do not round. -When the method of tininess detection matters but is not specified, the default -is to detect tininess on underflow after rounding, same as --tininessafter. -

- -

-notexact, -exact

- -

-When a <function> is specified that rounds to an -integer (either conversion to an integer type or a roundToInt -operation), the -notexact option indicates that the inexact -exception flag is never raised, while -exact indicates that the -inexact exception flag is to be raised if the result is inexact. -For other operations, these options are ignored. -If neither option is specified, the default is not to raise the inexact -exception flag when rounding to an integer, same as -notexact. -

- - -

Output Format

- -

-For each test case generated, testfloat_gen writes a single line -of text to standard output. -When the testfloat_gen command is given a -<type> argument, each test case consists of either -one integer value or one, two, or three floating-point values. -Each value is written to output as a raw hexadecimal number. -When there is more than one value per line, they are separated by spaces. -For example, output from executing -

-
-testfloat_gen f64 2
-
-
-might look like this: -
-
-3F90EB5825D6851E C3E0080080000000
-41E3C00000000000 C182024F8AE474A8
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80
-3FFFED6A25C534BE 3CA1000000020000
-...
-
-
-with each hexadecimal number being one 64-bit floating-point -value. -Note that, for floating-point values, the sign and exponent are at the -most-significant end of the number. -Thus, for the first number on the first line above, the leading hexadecimal -digits 3F9 are the sign and encoded exponent of the -64-bit floating-point value, and the remaining digits are the -encoded significand. -

- -

-When testfloat_gen is given a <function> -operation name, each line of output has not only the operands for the operation -but also the expected output, consisting of a result value and the exception -flags that are raised. -For example, the output from -

-
-testfloat_gen f64_add
-
-
-could include these lines: -
-
-3F90EB5825D6851E C3E0080080000000 C3E0080080000000 01
-41E3C00000000000 C182024F8AE474A8 41E377F6C1D46E2D 01
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80 7FF0000000000000 05
-3FFFED6A25C534BE 3CA1000000020000 3FFFED6A25C534BF 01
-...
-
-
-On each line, the first two numbers are the operands for the floating-point -addition, and the third and fourth numbers are the expected floating-point -result (the sum) and the exception flags raised. -Exception flags are encoded with one bit per flag as follows: -
- - - - - - - - - - - - -
bit 0   inexact exception
bit 1underflow exception
bit 2overflow exception
bit 3infinite exception (“divide by zero”)
bit 4invalid exception
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testfloat_ver.html b/addins/TestFloat-3e/doc/testfloat_ver.html deleted file mode 100644 index 83c6ea82d..000000000 --- a/addins/TestFloat-3e/doc/testfloat_ver.html +++ /dev/null @@ -1,270 +0,0 @@ - - - - -testfloat_ver - - - - -

Berkeley TestFloat Release 3e: testfloat_ver

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testfloat_ver program accepts test-case results obtained from -exercising an implementation of floating-point arithmetic and verifies that -those results conform to the IEEE Standard for Binary Floating-Point -Arithmetic. -testfloat_ver is part of the Berkeley TestFloat package, a small -collection of programs for performing such tests. -For general information about TestFloat, see file -TestFloat-general.html. -

- -

-A single execution of testfloat_ver verifies results for only a -single floating-point operation and associated options. -The testfloat_ver program must be repeatedly executed to verify -results for each operation to be tested. -

- -

-The test cases to be verified are read by testfloat_ver from -standard input. -This input will typically be piped from another program that, for each test -case, invokes the floating-point operation and writes out the results. -The format of testfloat_ver’s input is raw hexadecimal text, -described in the section below titled Input Format. -

- -

-For each test case given to it, testfloat_ver examines the -computed results and reports any unexpected results as likely errors. - -For more about the operation of testfloat_ver and how to interpret -its output, refer to -TestFloat-general.html. -

- - -

Command Syntax

- -

-The testfloat_ver program is executed as a command with this -syntax: -

-
-testfloat_ver [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of a testable operation. -The available options are documented below. -The testable operation names are listed in -TestFloat-general.html. -If testfloat_ver is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The testfloat_ver program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-errors <num>

- -

-The -errors option instructs testfloat_ver to report -no more than the specified number of errors. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, the program -exits. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testfloat_ver to continue for any number of errors. -

- -

-checkNaNs

- -

-The -checkNaNs option causes testfloat_ver to verify -the bitwise correctness of NaN results. -In order for this option to be sensible, testfloat_ver must have -been compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper NaN results for the system being -tested. -

- -

-checkInvInts

- -

-The -checkInvInts option causes testfloat_ver to -verify the bitwise correctness of integer results of invalid operations. -In order for this option to be sensible, testfloat_ver must have -been compiled so that its internal reference implementation of floating-point -(Berkeley SoftFloat) generates the proper integer results for the system being -tested. -

- -

-checkAll

- -

-Enables both -checkNaNs and -checkInvInts. -

- -

-precision32, -precision64, -precision80

- -

-When <function> is an 80-bit -double-extended-precision operation affected by rounding precision control, the --precision32 option indicates that the rounding precision should -be 32 bits, equivalent to 32-bit single-precision. -Likewise, -precision64 indicates that the rounding precision -should be 64 bits, equivalent to 64-bit -double-precision, and -precision80 indicates that the rounding -precision should be the full 80 bits of the -double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -When rounding precision is applicable but not specified, the default assumption -is the full 80 bits, same as -precision80. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-When <function> is an operation that requires -rounding, the -rnear_even option indicates that rounding should be -to nearest/even, -rnear_maxMag indicates rounding to -nearest/maximum magnitude (nearest-away), -rminMag indicates -rounding to minimum magnitude (toward zero), -rmin indicates -rounding to minimum (down, toward negative infinity), -rmax -indicates rounding to maximum (up, toward positive infinity), and --rodd, if supported, indicates rounding to odd. -These options are ignored for operations that are exact and thus do not round. -When rounding mode is relevant but not specified, the default assumption is -rounding to nearest/even, same as -rnear_even. -

- -

-tininessbefore, -tininessafter

- -

-When <function> is an operation that requires -rounding, the -tininessbefore option indicates that tininess on -underflow should be detected before rounding, while -tininessafter -indicates that tininess on underflow should be detected after rounding. -These options are ignored for operations that are exact and thus do not round. -When the method of tininess detection matters but is not specified, the default -assumption is that tininess should be detected after rounding, same as --tininessafter. -

- -

-notexact, -exact

- -

-When <function> is an operation that rounds to an -integer (either conversion to an integer type or a roundToInt -operation), the -notexact option indicates that the inexact -exception flag should never be raised, while -exact indicates that -the inexact exception flag should be raised when the result is inexact. -For other operations, these options are ignored. -If neither option is specified, the default assumption is that the -inexact exception flag should not be raised when rounding to an integer, -same as -notexact. -

- - -

Input Format

- -

-For a given <function> argument, the input format -expected by testfloat_ver is the same as the output generated by -program -testfloat_gen for -the same argument. -

- -

-Input to testfloat_ver is expected to be text, with each line -containing the data for one test case. -The number of input lines thus equals the number of test cases. -A single test case is organized as follows: first are the operands for the -operation, next is the result value obtained, and last is a number indicating -the exception flags that were raised. -These values are all expected to be provided as raw hexadecimal numbers -separated on the line by spaces. -For example, for the command -

-
-testfloat_ver f64_add
-
-
-valid input could include these lines: -
-
-3F90EB5825D6851E C3E0080080000000 C3E0080080000000 01
-41E3C00000000000 C182024F8AE474A8 41E377F6C1D46E2D 01
-7FD80FFFFFFFFFFF 7FEFFFFFFFFFFF80 7FF0000000000000 05
-3FFFED6A25C534BE 3CA1000000020000 3FFFED6A25C534BF 01
-...
-
-
-On each line above, the first two hexadecimal numbers represent the -64-bit floating-point operands, the third hexadecimal number is -the 64-bit floating-point result of the operation (the sum), and -the last hexadecimal number gives the exception flags that were raised by the -operation. -

- -

-Note that, for floating-point values, the sign and exponent are at the -most-significant end of the number. -Thus, for the first number on the first line above, the leading hexadecimal -digits 3F9 are the sign and encoded exponent of the -64-bit floating-point value, and the remaining digits are the -encoded significand. -

- -

-Exception flags are encoded with one bit per flag as follows: -

- - - - - - - - - - - - -
bit 0   inexact exception
bit 1underflow exception
bit 2overflow exception
bit 3infinite exception (“divide by zero”)
bit 4invalid exception
-
-

- - - - diff --git a/addins/TestFloat-3e/doc/testsoftfloat.html b/addins/TestFloat-3e/doc/testsoftfloat.html deleted file mode 100644 index cd8af6921..000000000 --- a/addins/TestFloat-3e/doc/testsoftfloat.html +++ /dev/null @@ -1,236 +0,0 @@ - - - - -testsoftfloat - - - - -

Berkeley TestFloat Release 3e: testsoftfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The testsoftfloat program tests that a build of the Berkeley -SoftFloat library conforms to the IEEE Standard for Binary Floating-Point -Arithmetic as expected. -Program testsoftfloat is part of the Berkeley TestFloat package, a -small collection of programs for performing such tests. -For general information about TestFloat, as well as for basics about the -operation of testsoftfloat and how to interpret its output, see -file -TestFloat-general.html. -

- -

-Note that, even if there are no bugs in the source code for SoftFloat (not -guaranteed), a build of SoftFloat might still fail due to an issue with the -build process, such as an incompatible compiler option or a compiler bug. -

- -

-The testsoftfloat program will ordinarily test a function for all -five rounding modes defined by the IEEE Floating-Point Standard, one after the -other, plus possibly a sixth mode, round to odd (depending on the -options selected when testsoftfloat was compiled). -If an operation is not supposed to require rounding, it will by default be -tested only with the rounding mode set to near_even -(nearest/even). -In the same way, if an operation is affected by the way in which underflow -tininess is detected, testsoftfloat tests the function with -tininess detected both before rounding and after rounding. -For 80-bit double-extended-precision operations affected by -rounding precision control, testsoftfloat also tests the function -for all three rounding precision modes, one after the other. -Testing can be limited to a single rounding mode, a single tininess mode, -and/or a single rounding precision with appropriate command-line options. -

- - -

Command Syntax

- -

-The testsoftfloat program is executed as a command with this -syntax: -

-
-testsoftfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable function -or a function set. -The available options and function sets are documented below. -If testsoftfloat is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The testsoftfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-seed <num>

- -

-The -seed option sets the seed for the pseudo-random number -generator used for generating test cases. -The argument to -seed is a nonnegative integer. -Executing the same testsoftfloat program with the same arguments -(including the same pseudo-random number seed) should always perform the same -sequence of tests, whereas changing the pseudo-random number seed should result -in a different sequence of tests. -The default seed number is 1. -

- -

-level <num>

- -

-The -level option sets the level of testing. -The argument to -level can be either 1 or 2. -The default is level 1. -Level 2 performs many more tests than level 1 and thus can reveal -bugs not found by level 1. -

- -

-errors <num>

- -

-The -errors option instructs testsoftfloat to report -no more than the specified number of errors for any combination of function, -rounding mode, etc. -The argument to -errors must be a nonnegative decimal integer. -Once the specified number of error reports has been generated, -testsoftfloat ends the current test and begins the next one, if -any. -The default is -errors 20. -

- -

-Against intuition, -errors 0 causes -testsoftfloat to report every error it finds. -

- -

-errorstop

- -

-The -errorstop option causes the program to exit after the first -function for which any errors are reported. -

- -

-forever

- -

-The -forever option causes a single function to be repeatedly -tested. -Only one rounding mode and/or rounding precision can be tested in a single -execution. -If not specified, the rounding mode defaults to nearest/even. -For 80-bit double-extended-precision functions, the rounding -precision defaults to full double-extended precision. -The testing level is set to 2 by this option. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision funcions affected by -rounding precision control, the -precision32 option restricts -testing to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -The other rounding precision choices are not tested. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision; -and -precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts testing to only the cases in -which the rounding mode is nearest/even. -The other rounding mode choices are not tested. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round. -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option restricts testing to only the cases in -which tininess on underflow is detected before rounding. -Likewise, -tininessafter restricts testing to only the cases in -which tininess on underflow is detected after rounding. -

- -

-notexact, -exact

- -

-For functions that round to an integer (conversions to integer types and the -roundToInt functions), the -notexact option restricts -testing to only the cases for which the exact operand -(specifying whether the inexact exception flag may be raised) is -false. -Likewise, the -exact option restricts testing to only the cases -for which the exact operand is true. -

- - -

Function Sets

- -

-Just as testsoftfloat can test a function for all five or six -rounding modes in sequence, multiple functions can be tested with a single -execution of testsoftfloat. -Two sets are recognized: -all1 and -all2. -The set -all1 is all one-operand operations, while --all2 is all two-operand operations. -A function set is used in place of a function name in the -testsoftfloat command line, such as -

-
-testsoftfloat [<option>...] -all1
-
-
-

- -

-For the purpose of deciding the number of operands of an operation, any -roundingMode and exact arguments are -ignored. -(Such arguments specify the rounding mode and whether the inexact -exception flag may be raised, respectively.) -Thus, functions that convert to integer type and the roundToInt -functions are included in the set of one-operand operations tested by --all1. -

- - - - diff --git a/addins/TestFloat-3e/doc/timesoftfloat.html b/addins/TestFloat-3e/doc/timesoftfloat.html deleted file mode 100644 index bb7264784..000000000 --- a/addins/TestFloat-3e/doc/timesoftfloat.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - -timesoftfloat - - - - -

Berkeley TestFloat Release 3e: timesoftfloat

- -

-John R. Hauser
-2018 January 20
-

- - -

Overview

- -

-The timesoftfloat program provides a simple way to evaluate the -speed of the floating-point operations of the Berkeley SoftFloat library. -Program timesoftfloat is included with the Berkeley TestFloat -package, a small collection of programs for testing that an implementation of -floating-point conforms to the IEEE Standard for Binary Floating-Point -Arithmetic. -Although timesoftfloat does not test floating-point correctness -like the other TestFloat programs, nevertheless timesoftfloat is a -partner to TestFloat’s testsoftfloat program. -For more about TestFloat generally and testsoftfloat specifically, -see file -TestFloat-general.html. -

- -

-Ordinarily, timesoftfloat will measure a function’s speed -separately for each of the five rounding modes defined by the IEEE -Floating-Point Standard, one after the other, plus possibly a sixth mode, -round to odd (depending on the options selected when -timesoftfloat was compiled). -If an operation is not supposed to require rounding, it will by default be -timed only with the rounding mode set to near_even (nearest/even). -In the same way, if an operation is affected by the way in which underflow -tininess is detected, timesoftfloat times the function with -tininess detected both before rounding and after rounding. -For 80-bit double-extended-precision operations affected by -rounding precision control, timesoftfloat also times the function -for each of the three rounding precision modes, one after the other. -Evaluation of a function can be limited to a single rounding mode, a single -tininess mode, and/or a single rounding precision with appropriate command-line -options. -

- -

-For each function and mode evaluated, timesoftfloat reports the -measured speed of the function in Mop/s, or “millions of operations per -second”. -The speeds reported by timesoftfloat may be affected somewhat by -other software executing at the same time as timesoftfloat. -Be aware also that the exact execution time of any SoftFloat function depends -partly on the values of arguments and the state of the processor’s caches -at the time the function is called. -Your actual experience with SoftFloat may differ from the speeds reported by -timesoftfloat for all these reasons. -

- -

-Note that the remainder operations for larger formats (f64_rem, -extF80_rem, and f128_rem) can be markedly slower than -other operations, particularly for double-extended-precision -(extF80_rem) and quadruple precision (f128_rem). -This is inherent to the remainder operation itself and is not a failing of the -SoftFloat implementation. -

- - -

Command Syntax

- -

-The timesoftfloat program is executed as a command with this -syntax: -

-
-timesoftfloat [<option>...] <function>
-
-
-Square brackets ([ ]) denote optional arguments, -<option> is a supported option, and -<function> is the name of either a testable function -or a function set. -The available options and function sets are documented below. -If timesoftfloat is executed without any arguments, a summary of -usage is written. -

- - -

Options

- -

-The timesoftfloat program accepts several command options. -If mutually contradictory options are given, the last one has priority. -

- -

-help

- -

-The -help option causes a summary of program usage to be written, -after which the program exits. -

- -

-precision32, -precision64, -precision80

- -

-For 80-bit double-extended-precision funcions affected by -rounding precision control, the -precision32 option restricts -timing of an operation to only the cases in which the rounding precision is -32 bits, equivalent to 32-bit single-precision. -Other rounding precision choices are not timed. -Likewise, -precision64 fixes the rounding precision to -64 bits, equivalent to 64-bit double-precision; -and -precision80 fixes the rounding precision to the full -80 bits of the double-extended-precision format. -All these options are ignored for operations not affected by rounding precision -control. -

- -

-rnear_even, -rnear_maxMag, -rminMag, -rmin, -rmax, -rodd

- -

-The -rnear_even option restricts timing of an operation to only -the cases in which the rounding mode is nearest/even. -Other rounding mode choices are not timed. -Likewise, -rnear_maxMag forces rounding to nearest/maximum -magnitude (nearest-away), -rminMag forces rounding to minimum -magnitude (toward zero), -rmin forces rounding to minimum (down, -toward negative infinity), -rmax forces rounding to maximum (up, -toward positive infinity), and -rodd, if supported, forces -rounding to odd. -These options are ignored for operations that are exact and thus do not round. -

- -

-tininessbefore, -tininessafter

- -

-The -tininessbefore option restricts timing of an operation to -only the cases in which tininess on underflow is detected before rounding. -Likewise, -tininessafter restricts measurement to only the cases -in which tininess on underflow is detected after rounding. -

- -

-notexact, -exact

- -

-For functions that round to an integer (conversions to integer types and the -roundToInt functions), the -notexact option restricts -timing of an operation to only the cases for which the -exact operand (specifying whether the inexact -exception flag may be raised) is false. -Likewise, the -exact option restricts measurement to only the -cases for which the exact operand is true. -

- - -

Function Sets

- -

-Just as timesoftfloat can time a function for all five or six -rounding modes in sequence, multiple functions can be timed with a single -execution of timesoftfloat. -Three sets are recognized: --all1, -all2, and -all. -The set -all1 is all one-operand operations, -all2 is -all two-operand operations, and -all is obviously all operations. -A function set is used in place of a function name in the -timesoftfloat command line, such as -

-
-timesoftfloat [<option>...] -all1
-
-
-

- -

-For the purpose of deciding the number of operands of an operation, any -roundingMode and exact arguments are -ignored. -(Such arguments specify the rounding mode and whether the inexact -exception flag may be raised, respectively.) -Thus, functions that convert to integer type and the roundToInt -functions are included in the set of one-operand operations timed by --all1. -

- - - - diff --git a/addins/TestFloat-3e/source/fail.c b/addins/TestFloat-3e/source/fail.c deleted file mode 100644 index dae6c6422..000000000 --- a/addins/TestFloat-3e/source/fail.c +++ /dev/null @@ -1,59 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include "platform.h" -#include "fail.h" - -char *fail_programName = ""; - -void fail( const char *messagePtr, ... ) -{ - va_list varArgs; - - fflush( 0 ); - fprintf( stderr, "%s: ", fail_programName ); - va_start( varArgs, messagePtr ); - vfprintf( stderr, messagePtr, varArgs ); - va_end( varArgs ); - fputs( ".\n", stderr ); - exit( EXIT_FAILURE ); - -} - diff --git a/addins/TestFloat-3e/source/fail.h b/addins/TestFloat-3e/source/fail.h deleted file mode 100644 index 0f1f48f78..000000000 --- a/addins/TestFloat-3e/source/fail.h +++ /dev/null @@ -1,41 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -extern char *fail_programName; - -void fail( const char *, ... ); - diff --git a/addins/TestFloat-3e/source/functionInfos.c b/addins/TestFloat-3e/source/functionInfos.c deleted file mode 100644 index e4d25e3fd..000000000 --- a/addins/TestFloat-3e/source/functionInfos.c +++ /dev/null @@ -1,290 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "functions.h" - -#define ARG_1 FUNC_ARG_UNARY -#define ARG_2 FUNC_ARG_BINARY -#define ARG_R FUNC_ARG_ROUNDINGMODE -#define ARG_E FUNC_ARG_EXACT -#define EFF_P FUNC_EFF_ROUNDINGPRECISION -#define EFF_R FUNC_EFF_ROUNDINGMODE -#define EFF_T FUNC_EFF_TININESSMODE -#define EFF_T_REDP FUNC_EFF_TININESSMODE_REDUCEDPREC - -/*---------------------------------------------------------------------------- -| Warning: This array must match the list of macros defined in "functions.h". -*----------------------------------------------------------------------------*/ -const struct functionInfo functionInfos[NUM_FUNCTIONS] = { - { 0, 0 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "ui32_to_f16", ARG_1 | EFF_R }, -#endif - { "ui32_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "ui32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "ui32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "ui32_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "ui64_to_f16", ARG_1 | EFF_R }, -#endif - { "ui64_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "ui64_to_f64", ARG_1 | EFF_R }, -#endif -#ifdef EXTFLOAT80 - { "ui64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "ui64_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "i32_to_f16", ARG_1 | EFF_R }, -#endif - { "i32_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "i32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "i32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "i32_to_f128", ARG_1 }, -#endif -#ifdef FLOAT16 - { "i64_to_f16", ARG_1 | EFF_R }, -#endif - { "i64_to_f32", ARG_1 | EFF_R }, -#ifdef FLOAT64 - { "i64_to_f64", ARG_1 | EFF_R }, -#endif -#ifdef EXTFLOAT80 - { "i64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "i64_to_f128", ARG_1 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "f16_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f16_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f16_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f16_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f16_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f16_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f16_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f16_to_i64_r_minMag", ARG_1 | ARG_E }, - { "f16_to_f32", ARG_1 }, -#ifdef FLOAT64 - { "f16_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "f16_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f16_to_f128", ARG_1 }, -#endif - { "f16_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f16_add", ARG_2 | EFF_R }, - { "f16_sub", ARG_2 | EFF_R }, - { "f16_mul", ARG_2 | EFF_R | EFF_T }, - { "f16_mulAdd", EFF_R | EFF_T }, - { "f16_div", ARG_2 | EFF_R }, - { "f16_rem", ARG_2 }, - { "f16_sqrt", ARG_1 | EFF_R }, - { "f16_eq", ARG_2 }, - { "f16_le", ARG_2 }, - { "f16_lt", ARG_2 }, - { "f16_eq_signaling", ARG_2 }, - { "f16_le_quiet", ARG_2 }, - { "f16_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { "f32_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f32_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f32_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f32_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f32_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f32_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f32_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f32_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f32_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef FLOAT64 - { "f32_to_f64", ARG_1 }, -#endif -#ifdef EXTFLOAT80 - { "f32_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f32_to_f128", ARG_1 }, -#endif - { "f32_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f32_add", ARG_2 | EFF_R }, - { "f32_sub", ARG_2 | EFF_R }, - { "f32_mul", ARG_2 | EFF_R | EFF_T }, - { "f32_mulAdd", EFF_R | EFF_T }, - { "f32_div", ARG_2 | EFF_R }, - { "f32_rem", ARG_2 }, - { "f32_sqrt", ARG_1 | EFF_R }, - { "f32_eq", ARG_2 }, - { "f32_le", ARG_2 }, - { "f32_lt", ARG_2 }, - { "f32_eq_signaling", ARG_2 }, - { "f32_le_quiet", ARG_2 }, - { "f32_lt_quiet", ARG_2 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - { "f64_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f64_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f64_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f64_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f64_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f64_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f64_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f64_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f64_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "f64_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef EXTFLOAT80 - { "f64_to_extF80", ARG_1 }, -#endif -#ifdef FLOAT128 - { "f64_to_f128", ARG_1 }, -#endif - { "f64_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f64_add", ARG_2 | EFF_R }, - { "f64_sub", ARG_2 | EFF_R }, - { "f64_mul", ARG_2 | EFF_R | EFF_T }, - { "f64_mulAdd", EFF_R | EFF_T }, - { "f64_div", ARG_2 | EFF_R }, - { "f64_rem", ARG_2 }, - { "f64_sqrt", ARG_1 | EFF_R }, - { "f64_eq", ARG_2 }, - { "f64_le", ARG_2 }, - { "f64_lt", ARG_2 }, - { "f64_eq_signaling", ARG_2 }, - { "f64_le_quiet", ARG_2 }, - { "f64_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - { "extF80_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_i32", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_i64", ARG_1 | ARG_R | ARG_E }, - { "extF80_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_i32_r_minMag", ARG_1 | ARG_E }, - { "extF80_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "extF80_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "extF80_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef FLOAT64 - { "extF80_to_f64", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef FLOAT128 - { "extF80_to_f128", ARG_1 }, -#endif - { "extF80_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "extF80_add", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_sub", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_mul", ARG_2 | EFF_P | EFF_R | EFF_T | EFF_T_REDP }, - { "extF80_div", ARG_2 | EFF_P | EFF_R | EFF_T_REDP }, - { "extF80_rem", ARG_2 }, - { "extF80_sqrt", ARG_1 | EFF_P | EFF_R }, - { "extF80_eq", ARG_2 }, - { "extF80_le", ARG_2 }, - { "extF80_lt", ARG_2 }, - { "extF80_eq_signaling", ARG_2 }, - { "extF80_le_quiet", ARG_2 }, - { "extF80_lt_quiet", ARG_2 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - { "f128_to_ui32", ARG_1 | ARG_R | ARG_E }, - { "f128_to_ui64", ARG_1 | ARG_R | ARG_E }, - { "f128_to_i32", ARG_1 | ARG_R | ARG_E }, - { "f128_to_i64", ARG_1 | ARG_R | ARG_E }, - { "f128_to_ui32_r_minMag", ARG_1 | ARG_E }, - { "f128_to_ui64_r_minMag", ARG_1 | ARG_E }, - { "f128_to_i32_r_minMag", ARG_1 | ARG_E }, - { "f128_to_i64_r_minMag", ARG_1 | ARG_E }, -#ifdef FLOAT16 - { "f128_to_f16", ARG_1 | EFF_R | EFF_T }, -#endif - { "f128_to_f32", ARG_1 | EFF_R | EFF_T }, -#ifdef FLOAT64 - { "f128_to_f64", ARG_1 | EFF_R | EFF_T }, -#endif -#ifdef EXTFLOAT80 - { "f128_to_extF80", ARG_1 | EFF_R | EFF_T }, -#endif - { "f128_roundToInt", ARG_1 | ARG_R | ARG_E }, - { "f128_add", ARG_2 | EFF_R }, - { "f128_sub", ARG_2 | EFF_R }, - { "f128_mul", ARG_2 | EFF_R | EFF_T }, - { "f128_mulAdd", EFF_R | EFF_T }, - { "f128_div", ARG_2 | EFF_R }, - { "f128_rem", ARG_2 }, - { "f128_sqrt", ARG_1 | EFF_R }, - { "f128_eq", ARG_2 }, - { "f128_le", ARG_2 }, - { "f128_lt", ARG_2 }, - { "f128_eq_signaling", ARG_2 }, - { "f128_le_quiet", ARG_2 }, - { "f128_lt_quiet", ARG_2 }, -#endif -}; - diff --git a/addins/TestFloat-3e/source/functions.h b/addins/TestFloat-3e/source/functions.h deleted file mode 100644 index 85eaaf8be..000000000 --- a/addins/TestFloat-3e/source/functions.h +++ /dev/null @@ -1,324 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include - -/*---------------------------------------------------------------------------- -| Warning: This list must match the contents of "functionInfos.c". -*----------------------------------------------------------------------------*/ -enum { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - UI32_TO_F16 = 1, - UI32_TO_F32, -#else - UI32_TO_F32 = 1, -#endif -#ifdef FLOAT64 - UI32_TO_F64, -#endif -#ifdef EXTFLOAT80 - UI32_TO_EXTF80, -#endif -#ifdef FLOAT128 - UI32_TO_F128, -#endif -#ifdef FLOAT16 - UI64_TO_F16, -#endif - UI64_TO_F32, -#ifdef FLOAT64 - UI64_TO_F64, -#endif -#ifdef EXTFLOAT80 - UI64_TO_EXTF80, -#endif -#ifdef FLOAT128 - UI64_TO_F128, -#endif -#ifdef FLOAT16 - I32_TO_F16, -#endif - I32_TO_F32, -#ifdef FLOAT64 - I32_TO_F64, -#endif -#ifdef EXTFLOAT80 - I32_TO_EXTF80, -#endif -#ifdef FLOAT128 - I32_TO_F128, -#endif -#ifdef FLOAT16 - I64_TO_F16, -#endif - I64_TO_F32, -#ifdef FLOAT64 - I64_TO_F64, -#endif -#ifdef EXTFLOAT80 - I64_TO_EXTF80, -#endif -#ifdef FLOAT128 - I64_TO_F128, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - F16_TO_UI32, - F16_TO_UI64, - F16_TO_I32, - F16_TO_I64, - F16_TO_UI32_R_MINMAG, - F16_TO_UI64_R_MINMAG, - F16_TO_I32_R_MINMAG, - F16_TO_I64_R_MINMAG, - F16_TO_F32, -#ifdef FLOAT64 - F16_TO_F64, -#endif -#ifdef EXTFLOAT80 - F16_TO_EXTF80, -#endif -#ifdef FLOAT128 - F16_TO_F128, -#endif - F16_ROUNDTOINT, - F16_ADD, - F16_SUB, - F16_MUL, - F16_MULADD, - F16_DIV, - F16_REM, - F16_SQRT, - F16_EQ, - F16_LE, - F16_LT, - F16_EQ_SIGNALING, - F16_LE_QUIET, - F16_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - F32_TO_UI32, - F32_TO_UI64, - F32_TO_I32, - F32_TO_I64, - F32_TO_UI32_R_MINMAG, - F32_TO_UI64_R_MINMAG, - F32_TO_I32_R_MINMAG, - F32_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F32_TO_F16, -#endif -#ifdef FLOAT64 - F32_TO_F64, -#endif -#ifdef EXTFLOAT80 - F32_TO_EXTF80, -#endif -#ifdef FLOAT128 - F32_TO_F128, -#endif - F32_ROUNDTOINT, - F32_ADD, - F32_SUB, - F32_MUL, - F32_MULADD, - F32_DIV, - F32_REM, - F32_SQRT, - F32_EQ, - F32_LE, - F32_LT, - F32_EQ_SIGNALING, - F32_LE_QUIET, - F32_LT_QUIET, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - F64_TO_UI32, - F64_TO_UI64, - F64_TO_I32, - F64_TO_I64, - F64_TO_UI32_R_MINMAG, - F64_TO_UI64_R_MINMAG, - F64_TO_I32_R_MINMAG, - F64_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F64_TO_F16, -#endif - F64_TO_F32, -#ifdef EXTFLOAT80 - F64_TO_EXTF80, -#endif -#ifdef FLOAT128 - F64_TO_F128, -#endif - F64_ROUNDTOINT, - F64_ADD, - F64_SUB, - F64_MUL, - F64_MULADD, - F64_DIV, - F64_REM, - F64_SQRT, - F64_EQ, - F64_LE, - F64_LT, - F64_EQ_SIGNALING, - F64_LE_QUIET, - F64_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - EXTF80_TO_UI32, - EXTF80_TO_UI64, - EXTF80_TO_I32, - EXTF80_TO_I64, - EXTF80_TO_UI32_R_MINMAG, - EXTF80_TO_UI64_R_MINMAG, - EXTF80_TO_I32_R_MINMAG, - EXTF80_TO_I64_R_MINMAG, -#ifdef FLOAT16 - EXTF80_TO_F16, -#endif - EXTF80_TO_F32, -#ifdef FLOAT64 - EXTF80_TO_F64, -#endif -#ifdef FLOAT128 - EXTF80_TO_F128, -#endif - EXTF80_ROUNDTOINT, - EXTF80_ADD, - EXTF80_SUB, - EXTF80_MUL, - EXTF80_DIV, - EXTF80_REM, - EXTF80_SQRT, - EXTF80_EQ, - EXTF80_LE, - EXTF80_LT, - EXTF80_EQ_SIGNALING, - EXTF80_LE_QUIET, - EXTF80_LT_QUIET, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - F128_TO_UI32, - F128_TO_UI64, - F128_TO_I32, - F128_TO_I64, - F128_TO_UI32_R_MINMAG, - F128_TO_UI64_R_MINMAG, - F128_TO_I32_R_MINMAG, - F128_TO_I64_R_MINMAG, -#ifdef FLOAT16 - F128_TO_F16, -#endif - F128_TO_F32, -#ifdef FLOAT64 - F128_TO_F64, -#endif -#ifdef EXTFLOAT80 - F128_TO_EXTF80, -#endif - F128_ROUNDTOINT, - F128_ADD, - F128_SUB, - F128_MUL, - F128_MULADD, - F128_DIV, - F128_REM, - F128_SQRT, - F128_EQ, - F128_LE, - F128_LT, - F128_EQ_SIGNALING, - F128_LE_QUIET, - F128_LT_QUIET, -#endif - NUM_FUNCTIONS -}; - -enum { - ROUND_NEAR_EVEN = 1, - ROUND_MINMAG, - ROUND_MIN, - ROUND_MAX, - ROUND_NEAR_MAXMAG, -#ifdef FLOAT_ROUND_ODD - ROUND_ODD, -#endif - NUM_ROUNDINGMODES -}; -enum { - TININESS_BEFORE_ROUNDING = 1, - TININESS_AFTER_ROUNDING, - NUM_TININESSMODES -}; - -extern const uint_fast8_t roundingModes[NUM_ROUNDINGMODES]; -extern const uint_fast8_t tininessModes[NUM_TININESSMODES]; - -enum { - FUNC_ARG_UNARY = 0x01, - FUNC_ARG_BINARY = 0x02, - FUNC_ARG_ROUNDINGMODE = 0x04, - FUNC_ARG_EXACT = 0x08, - FUNC_EFF_ROUNDINGPRECISION = 0x10, - FUNC_EFF_ROUNDINGMODE = 0x20, - FUNC_EFF_TININESSMODE = 0x40, - FUNC_EFF_TININESSMODE_REDUCEDPREC = 0x80 -}; -struct functionInfo { - const char *namePtr; - unsigned char attribs; -}; -extern const struct functionInfo functionInfos[NUM_FUNCTIONS]; - -struct standardFunctionInfo { - const char *namePtr; - unsigned char functionCode; - char roundingCode, exact; -}; -extern const struct standardFunctionInfo standardFunctionInfos[]; - diff --git a/addins/TestFloat-3e/source/functions_common.c b/addins/TestFloat-3e/source/functions_common.c deleted file mode 100644 index 16cf3c72f..000000000 --- a/addins/TestFloat-3e/source/functions_common.c +++ /dev/null @@ -1,60 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "functions.h" - -const uint_fast8_t roundingModes[NUM_ROUNDINGMODES] = { - 0, - softfloat_round_near_even, - softfloat_round_minMag, - softfloat_round_min, - softfloat_round_max, - softfloat_round_near_maxMag, -#ifdef FLOAT_ROUND_ODD - softfloat_round_odd -#endif -}; - -const uint_fast8_t tininessModes[NUM_TININESSMODES] = { - 0, - softfloat_tininess_beforeRounding, - softfloat_tininess_afterRounding -}; - diff --git a/addins/TestFloat-3e/source/genCases.h b/addins/TestFloat-3e/source/genCases.h deleted file mode 100644 index efea7dd1a..000000000 --- a/addins/TestFloat-3e/source/genCases.h +++ /dev/null @@ -1,114 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "softfloat.h" - -extern int genCases_level; - -void genCases_setLevel( int ); - -extern uint_fast64_t genCases_total; -extern bool genCases_done; - -void genCases_ui32_a_init( void ); -void genCases_ui32_a_next( void ); -extern uint32_t genCases_ui32_a; - -void genCases_ui64_a_init( void ); -void genCases_ui64_a_next( void ); -extern uint64_t genCases_ui64_a; - -void genCases_i32_a_init( void ); -void genCases_i32_a_next( void ); -extern int32_t genCases_i32_a; - -void genCases_i64_a_init( void ); -void genCases_i64_a_next( void ); -extern int64_t genCases_i64_a; - -#ifdef FLOAT16 -void genCases_f16_a_init( void ); -void genCases_f16_a_next( void ); -void genCases_f16_ab_init( void ); -void genCases_f16_ab_next( void ); -void genCases_f16_abc_init( void ); -void genCases_f16_abc_next( void ); -extern float16_t genCases_f16_a, genCases_f16_b, genCases_f16_c; -#endif - -void genCases_f32_a_init( void ); -void genCases_f32_a_next( void ); -void genCases_f32_ab_init( void ); -void genCases_f32_ab_next( void ); -void genCases_f32_abc_init( void ); -void genCases_f32_abc_next( void ); -extern float32_t genCases_f32_a, genCases_f32_b, genCases_f32_c; - -#ifdef FLOAT64 -void genCases_f64_a_init( void ); -void genCases_f64_a_next( void ); -void genCases_f64_ab_init( void ); -void genCases_f64_ab_next( void ); -void genCases_f64_abc_init( void ); -void genCases_f64_abc_next( void ); -extern float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c; -#endif - -#ifdef EXTFLOAT80 -void genCases_extF80_a_init( void ); -void genCases_extF80_a_next( void ); -void genCases_extF80_ab_init( void ); -void genCases_extF80_ab_next( void ); -void genCases_extF80_abc_init( void ); -void genCases_extF80_abc_next( void ); -extern extFloat80_t genCases_extF80_a, genCases_extF80_b, genCases_extF80_c; -#endif - -#ifdef FLOAT128 -void genCases_f128_a_init( void ); -void genCases_f128_a_next( void ); -void genCases_f128_ab_init( void ); -void genCases_f128_ab_next( void ); -void genCases_f128_abc_init( void ); -void genCases_f128_abc_next( void ); -extern float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c; -#endif - -void genCases_writeTestsTotal( bool ); - diff --git a/addins/TestFloat-3e/source/genCases_common.c b/addins/TestFloat-3e/source/genCases_common.c deleted file mode 100644 index 25e733e45..000000000 --- a/addins/TestFloat-3e/source/genCases_common.c +++ /dev/null @@ -1,58 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "fail.h" -#include "genCases.h" - -int genCases_level = 0; - -void genCases_setLevel( int newLevel ) -{ - - if ( (newLevel < 1) || (2 < newLevel) ) { - fail( "Invalid testing level %d", newLevel ); - } - genCases_level = newLevel; - -} - -uint_fast64_t genCases_total; -bool genCases_done; - diff --git a/addins/TestFloat-3e/source/genCases_extF80.c b/addins/TestFloat-3e/source/genCases_extF80.c deleted file mode 100644 index 97e455777..000000000 --- a/addins/TestFloat-3e/source/genCases_extF80.c +++ /dev/null @@ -1,920 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef EXTFLOAT80 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -enum { - extF80NumQIn = 22, - extF80NumQOut = 76, - extF80NumP1 = 4, - extF80NumP2 = 248 -}; -static const uint16_t extF80QIn[extF80NumQIn] = { - 0x0000, /* positive, subnormal */ - 0x0001, /* positive, -16382 */ - 0x3FBF, /* positive, -64 */ - 0x3FFD, /* positive, -2 */ - 0x3FFE, /* positive, -1 */ - 0x3FFF, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4001, /* positive, 2 */ - 0x403F, /* positive, 64 */ - 0x7FFE, /* positive, 16383 */ - 0x7FFF, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8001, /* negative, -16382 */ - 0xBFBF, /* negative, -64 */ - 0xBFFD, /* negative, -2 */ - 0xBFFE, /* negative, -1 */ - 0xBFFF, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC001, /* negative, 2 */ - 0xC03F, /* negative, 64 */ - 0xFFFE, /* negative, 16383 */ - 0xFFFF /* negative, infinity or NaN */ -}; -static const uint16_t extF80QOut[extF80NumQOut] = { - 0x0000, /* positive, subnormal */ - 0x0001, /* positive, -16382 */ - 0x0002, /* positive, -16381 */ - 0x3BFE, /* positive, -1025 */ - 0x3BFF, /* positive, -1024 */ - 0x3C00, /* positive, -1023 */ - 0x3C01, /* positive, -1022 */ - 0x3F7E, /* positive, -129 */ - 0x3F7F, /* positive, -128 */ - 0x3F80, /* positive, -127 */ - 0x3F81, /* positive, -126 */ - 0x3FBF, /* positive, -64 */ - 0x3FFB, /* positive, -4 */ - 0x3FFC, /* positive, -3 */ - 0x3FFD, /* positive, -2 */ - 0x3FFE, /* positive, -1 */ - 0x3FFF, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4001, /* positive, 2 */ - 0x4002, /* positive, 3 */ - 0x4003, /* positive, 4 */ - 0x401C, /* positive, 29 */ - 0x401D, /* positive, 30 */ - 0x401E, /* positive, 31 */ - 0x401F, /* positive, 32 */ - 0x403C, /* positive, 61 */ - 0x403D, /* positive, 62 */ - 0x403E, /* positive, 63 */ - 0x403F, /* positive, 64 */ - 0x407E, /* positive, 127 */ - 0x407F, /* positive, 128 */ - 0x4080, /* positive, 129 */ - 0x43FE, /* positive, 1023 */ - 0x43FF, /* positive, 1024 */ - 0x4400, /* positive, 1025 */ - 0x7FFD, /* positive, 16382 */ - 0x7FFE, /* positive, 16383 */ - 0x7FFF, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8001, /* negative, -16382 */ - 0x8002, /* negative, -16381 */ - 0xBBFE, /* negative, -1025 */ - 0xBBFF, /* negative, -1024 */ - 0xBC00, /* negative, -1023 */ - 0xBC01, /* negative, -1022 */ - 0xBF7E, /* negative, -129 */ - 0xBF7F, /* negative, -128 */ - 0xBF80, /* negative, -127 */ - 0xBF81, /* negative, -126 */ - 0xBFBF, /* negative, -64 */ - 0xBFFB, /* negative, -4 */ - 0xBFFC, /* negative, -3 */ - 0xBFFD, /* negative, -2 */ - 0xBFFE, /* negative, -1 */ - 0xBFFF, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC001, /* negative, 2 */ - 0xC002, /* negative, 3 */ - 0xC003, /* negative, 4 */ - 0xC01C, /* negative, 29 */ - 0xC01D, /* negative, 30 */ - 0xC01E, /* negative, 31 */ - 0xC01F, /* negative, 32 */ - 0xC03C, /* negative, 61 */ - 0xC03D, /* negative, 62 */ - 0xC03E, /* negative, 63 */ - 0xC03F, /* negative, 64 */ - 0xC07E, /* negative, 127 */ - 0xC07F, /* negative, 128 */ - 0xC080, /* negative, 129 */ - 0xC3FE, /* negative, 1023 */ - 0xC3FF, /* negative, 1024 */ - 0xC400, /* negative, 1025 */ - 0xFFFD, /* negative, 16382 */ - 0xFFFE, /* negative, 16383 */ - 0xFFFF /* negative, infinity or NaN */ -}; -static const uint64_t extF80P1[extF80NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFE ) -}; -static const uint64_t extF80P2[extF80NumP2] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x6000000000000000 ), - UINT64_C( 0x7000000000000000 ), - UINT64_C( 0x7800000000000000 ), - UINT64_C( 0x7C00000000000000 ), - UINT64_C( 0x7E00000000000000 ), - UINT64_C( 0x7F00000000000000 ), - UINT64_C( 0x7F80000000000000 ), - UINT64_C( 0x7FC0000000000000 ), - UINT64_C( 0x7FE0000000000000 ), - UINT64_C( 0x7FF0000000000000 ), - UINT64_C( 0x7FF8000000000000 ), - UINT64_C( 0x7FFC000000000000 ), - UINT64_C( 0x7FFE000000000000 ), - UINT64_C( 0x7FFF000000000000 ), - UINT64_C( 0x7FFF800000000000 ), - UINT64_C( 0x7FFFC00000000000 ), - UINT64_C( 0x7FFFE00000000000 ), - UINT64_C( 0x7FFFF00000000000 ), - UINT64_C( 0x7FFFF80000000000 ), - UINT64_C( 0x7FFFFC0000000000 ), - UINT64_C( 0x7FFFFE0000000000 ), - UINT64_C( 0x7FFFFF0000000000 ), - UINT64_C( 0x7FFFFF8000000000 ), - UINT64_C( 0x7FFFFFC000000000 ), - UINT64_C( 0x7FFFFFE000000000 ), - UINT64_C( 0x7FFFFFF000000000 ), - UINT64_C( 0x7FFFFFF800000000 ), - UINT64_C( 0x7FFFFFFC00000000 ), - UINT64_C( 0x7FFFFFFE00000000 ), - UINT64_C( 0x7FFFFFFF00000000 ), - UINT64_C( 0x7FFFFFFF80000000 ), - UINT64_C( 0x7FFFFFFFC0000000 ), - UINT64_C( 0x7FFFFFFFE0000000 ), - UINT64_C( 0x7FFFFFFFF0000000 ), - UINT64_C( 0x7FFFFFFFF8000000 ), - UINT64_C( 0x7FFFFFFFFC000000 ), - UINT64_C( 0x7FFFFFFFFE000000 ), - UINT64_C( 0x7FFFFFFFFF000000 ), - UINT64_C( 0x7FFFFFFFFF800000 ), - UINT64_C( 0x7FFFFFFFFFC00000 ), - UINT64_C( 0x7FFFFFFFFFE00000 ), - UINT64_C( 0x7FFFFFFFFFF00000 ), - UINT64_C( 0x7FFFFFFFFFF80000 ), - UINT64_C( 0x7FFFFFFFFFFC0000 ), - UINT64_C( 0x7FFFFFFFFFFE0000 ), - UINT64_C( 0x7FFFFFFFFFFF0000 ), - UINT64_C( 0x7FFFFFFFFFFF8000 ), - UINT64_C( 0x7FFFFFFFFFFFC000 ), - UINT64_C( 0x7FFFFFFFFFFFE000 ), - UINT64_C( 0x7FFFFFFFFFFFF000 ), - UINT64_C( 0x7FFFFFFFFFFFF800 ), - UINT64_C( 0x7FFFFFFFFFFFFC00 ), - UINT64_C( 0x7FFFFFFFFFFFFE00 ), - UINT64_C( 0x7FFFFFFFFFFFFF00 ), - UINT64_C( 0x7FFFFFFFFFFFFF80 ), - UINT64_C( 0x7FFFFFFFFFFFFFC0 ), - UINT64_C( 0x7FFFFFFFFFFFFFE0 ), - UINT64_C( 0x7FFFFFFFFFFFFFF0 ), - UINT64_C( 0x7FFFFFFFFFFFFFF8 ), - UINT64_C( 0x7FFFFFFFFFFFFFFC ), - UINT64_C( 0x7FFFFFFFFFFFFFFE ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFD ), - UINT64_C( 0x7FFFFFFFFFFFFFFB ), - UINT64_C( 0x7FFFFFFFFFFFFFF7 ), - UINT64_C( 0x7FFFFFFFFFFFFFEF ), - UINT64_C( 0x7FFFFFFFFFFFFFDF ), - UINT64_C( 0x7FFFFFFFFFFFFFBF ), - UINT64_C( 0x7FFFFFFFFFFFFF7F ), - UINT64_C( 0x7FFFFFFFFFFFFEFF ), - UINT64_C( 0x7FFFFFFFFFFFFDFF ), - UINT64_C( 0x7FFFFFFFFFFFFBFF ), - UINT64_C( 0x7FFFFFFFFFFFF7FF ), - UINT64_C( 0x7FFFFFFFFFFFEFFF ), - UINT64_C( 0x7FFFFFFFFFFFDFFF ), - UINT64_C( 0x7FFFFFFFFFFFBFFF ), - UINT64_C( 0x7FFFFFFFFFFF7FFF ), - UINT64_C( 0x7FFFFFFFFFFEFFFF ), - UINT64_C( 0x7FFFFFFFFFFDFFFF ), - UINT64_C( 0x7FFFFFFFFFFBFFFF ), - UINT64_C( 0x7FFFFFFFFFF7FFFF ), - UINT64_C( 0x7FFFFFFFFFEFFFFF ), - UINT64_C( 0x7FFFFFFFFFDFFFFF ), - UINT64_C( 0x7FFFFFFFFFBFFFFF ), - UINT64_C( 0x7FFFFFFFFF7FFFFF ), - UINT64_C( 0x7FFFFFFFFEFFFFFF ), - UINT64_C( 0x7FFFFFFFFDFFFFFF ), - UINT64_C( 0x7FFFFFFFFBFFFFFF ), - UINT64_C( 0x7FFFFFFFF7FFFFFF ), - UINT64_C( 0x7FFFFFFFEFFFFFFF ), - UINT64_C( 0x7FFFFFFFDFFFFFFF ), - UINT64_C( 0x7FFFFFFFBFFFFFFF ), - UINT64_C( 0x7FFFFFFF7FFFFFFF ), - UINT64_C( 0x7FFFFFFEFFFFFFFF ), - UINT64_C( 0x7FFFFFFDFFFFFFFF ), - UINT64_C( 0x7FFFFFFBFFFFFFFF ), - UINT64_C( 0x7FFFFFF7FFFFFFFF ), - UINT64_C( 0x7FFFFFEFFFFFFFFF ), - UINT64_C( 0x7FFFFFDFFFFFFFFF ), - UINT64_C( 0x7FFFFFBFFFFFFFFF ), - UINT64_C( 0x7FFFFF7FFFFFFFFF ), - UINT64_C( 0x7FFFFEFFFFFFFFFF ), - UINT64_C( 0x7FFFFDFFFFFFFFFF ), - UINT64_C( 0x7FFFFBFFFFFFFFFF ), - UINT64_C( 0x7FFFF7FFFFFFFFFF ), - UINT64_C( 0x7FFFEFFFFFFFFFFF ), - UINT64_C( 0x7FFFDFFFFFFFFFFF ), - UINT64_C( 0x7FFFBFFFFFFFFFFF ), - UINT64_C( 0x7FFF7FFFFFFFFFFF ), - UINT64_C( 0x7FFEFFFFFFFFFFFF ), - UINT64_C( 0x7FFDFFFFFFFFFFFF ), - UINT64_C( 0x7FFBFFFFFFFFFFFF ), - UINT64_C( 0x7FF7FFFFFFFFFFFF ), - UINT64_C( 0x7FEFFFFFFFFFFFFF ), - UINT64_C( 0x7FDFFFFFFFFFFFFF ), - UINT64_C( 0x7FBFFFFFFFFFFFFF ), - UINT64_C( 0x7F7FFFFFFFFFFFFF ), - UINT64_C( 0x7EFFFFFFFFFFFFFF ), - UINT64_C( 0x7DFFFFFFFFFFFFFF ), - UINT64_C( 0x7BFFFFFFFFFFFFFF ), - UINT64_C( 0x77FFFFFFFFFFFFFF ), - UINT64_C( 0x6FFFFFFFFFFFFFFF ), - UINT64_C( 0x5FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static const uint_fast32_t extF80NumQInP1 = extF80NumQIn * extF80NumP1; -static const uint_fast32_t extF80NumQOutP1 = extF80NumQOut * extF80NumP1; - -static void extF80NextQInP1( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QIn[expNum]; - uiZ0 = extF80P1[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static - void extF80NextQOutP1( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QOut[expNum]; - uiZ0 = extF80P1[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static const uint_fast32_t extF80NumQInP2 = extF80NumQIn * extF80NumP2; -static const uint_fast32_t extF80NumQOutP2 = extF80NumQOut * extF80NumP2; - -static void extF80NextQInP2( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QIn[expNum]; - uiZ0 = extF80P2[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static - void extF80NextQOutP2( struct sequence *sequencePtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int expNum, sigNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZ64 = extF80QOut[expNum]; - uiZ0 = extF80P2[sigNum]; - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - ++sigNum; - if ( extF80NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( extF80NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void extF80RandomQOutP3( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = extF80QOut[randomN_ui8( extF80NumQOut )]; - uiZ0 = - (extF80P2[randomN_ui8( extF80NumP2 )] - + extF80P2[randomN_ui8( extF80NumP2 )]) - & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80RandomQOutPInf( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - uiZ64 = extF80QOut[randomN_ui8( extF80NumQOut )]; - uiZ0 = random_ui64() & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -enum { extF80NumQInfWeightMasks = 14 }; -static const uint16_t extF80QInfWeightMasks[extF80NumQInfWeightMasks] = { - 0xFFFF, - 0xFFFF, - 0xBFFF, - 0x9FFF, - 0x87FF, - 0x87FF, - 0x83FF, - 0x81FF, - 0x80FF, - 0x807F, - 0x803F, - 0x801F, - 0x800F, - 0x8007 -}; -static const uint16_t extF80QInfWeightOffsets[extF80NumQInfWeightMasks] = { - 0x0000, - 0x0000, - 0x2000, - 0x3000, - 0x3800, - 0x3C00, - 0x3E00, - 0x3F00, - 0x3F80, - 0x3FC0, - 0x3FE0, - 0x3FF0, - 0x3FF8, - 0x3FFC -}; - -static void extF80RandomQInfP3( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int weightMaskNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - weightMaskNum = randomN_ui8( extF80NumQInfWeightMasks ); - uiZ64 = - (random_ui16() & extF80QInfWeightMasks[weightMaskNum]) - + extF80QInfWeightOffsets[weightMaskNum]; - uiZ0 = - (extF80P2[randomN_ui8( extF80NumP2 )] - + extF80P2[randomN_ui8( extF80NumP2 )]) - & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80RandomQInfPInf( extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - int weightMaskNum; - uint_fast16_t uiZ64; - uint_fast64_t uiZ0; - - zSPtr = (struct extFloat80M *) zPtr; - weightMaskNum = randomN_ui8( extF80NumQInfWeightMasks ); - uiZ64 = - (random_ui16() & extF80QInfWeightMasks[weightMaskNum]) - + extF80QInfWeightOffsets[weightMaskNum]; - uiZ0 = random_ui64() & UINT64_C( 0x7FFFFFFFFFFFFFFF ); - if ( uiZ64 & 0x7FFF ) uiZ0 |= UINT64_C( 0x8000000000000000 ); - zSPtr->signExp = uiZ64; - zSPtr->signif = uiZ0; - -} - -static void extF80Random( extFloat80_t *zPtr ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - extF80RandomQOutP3( zPtr ); - break; - case 3: - extF80RandomQOutPInf( zPtr ); - break; - case 4: - case 5: - case 6: - extF80RandomQInfP3( zPtr ); - break; - case 7: - extF80RandomQInfPInf( zPtr ); - break; - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static extFloat80_t currentA, currentB, currentC; -static int subcase; - -extFloat80_t genCases_extF80_a, genCases_extF80_b, genCases_extF80_c; - -void genCases_extF80_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * extF80NumQOutP1 : 2 * extF80NumQOutP2; - genCases_done = false; - -} - -void genCases_extF80_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - extF80Random( &genCases_extF80_a ); - break; - case 2: - extF80NextQOutP1( &sequenceA, &genCases_extF80_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - break; - case 1: - extF80NextQOutP2( &sequenceA, &genCases_extF80_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_extF80_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * extF80NumQInP1 * extF80NumQInP1; - extF80NextQInP1( &sequenceA, ¤tA ); - } else { - genCases_total = 2 * extF80NumQInP2 * extF80NumQInP2; - extF80NextQInP2( &sequenceA, ¤tA ); - } - genCases_done = false; - -} - -void genCases_extF80_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP1( &sequenceA, ¤tA ); - } - extF80NextQInP1( &sequenceB, ¤tB ); - case 2: - case 4: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - break; - case 1: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - break; - case 3: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - break; - case 5: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP2( &sequenceA, ¤tA ); - } - genCases_extF80_a = currentA; - extF80NextQInP2( &sequenceB, &genCases_extF80_b ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_extF80_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * extF80NumQInP1 * extF80NumQInP1 * extF80NumQInP1; - extF80NextQInP1( &sequenceA, ¤tA ); - extF80NextQInP1( &sequenceB, ¤tB ); - } else { - genCases_total = 2 * extF80NumQInP2 * extF80NumQInP2 * extF80NumQInP2; - extF80NextQInP2( &sequenceA, ¤tA ); - extF80NextQInP2( &sequenceB, ¤tB ); - } - genCases_done = false; - -} - -void genCases_extF80_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP1( &sequenceA, ¤tA ); - } - extF80NextQInP1( &sequenceB, ¤tB ); - } - extF80NextQInP1( &sequenceC, ¤tC ); - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - genCases_extF80_c = currentC; - break; - case 1: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - extF80Random( &genCases_extF80_c ); - break; - case 2: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 3: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - genCases_extF80_c = currentC; - break; - case 4: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 5: - extF80Random( &genCases_extF80_a ); - genCases_extF80_b = currentB; - extF80Random( &genCases_extF80_c ); - break; - case 6: - genCases_extF80_a = currentA; - extF80Random( &genCases_extF80_b ); - genCases_extF80_c = currentC; - break; - case 7: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 8: - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - genCases_extF80_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - extF80Random( &genCases_extF80_a ); - extF80Random( &genCases_extF80_b ); - extF80Random( &genCases_extF80_c ); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - extF80NextQInP2( &sequenceA, ¤tA ); - } - extF80NextQInP2( &sequenceB, ¤tB ); - } - genCases_extF80_a = currentA; - genCases_extF80_b = currentB; - extF80NextQInP2( &sequenceC, &genCases_extF80_c ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f128.c b/addins/TestFloat-3e/source/genCases_f128.c deleted file mode 100644 index e20c7a17f..000000000 --- a/addins/TestFloat-3e/source/genCases_f128.c +++ /dev/null @@ -1,1090 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "uint128.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT128 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -enum { - f128NumQIn = 22, - f128NumQOut = 78, - f128NumP1 = 4, - f128NumP2 = 443 -}; -static const uint64_t f128QIn[f128NumQIn] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0001000000000000 ), /* positive, -16382 */ - UINT64_C( 0x3F8E000000000000 ), /* positive, -113 */ - UINT64_C( 0x3FFD000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FFE000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FFF000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4001000000000000 ), /* positive, 2 */ - UINT64_C( 0x4070000000000000 ), /* positive, 113 */ - UINT64_C( 0x7FFE000000000000 ), /* positive, 16383 */ - UINT64_C( 0x7FFF000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8001000000000000 ), /* negative, -16382 */ - UINT64_C( 0xBF8E000000000000 ), /* negative, -113 */ - UINT64_C( 0xBFFD000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFFE000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFFF000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC001000000000000 ), /* negative, 2 */ - UINT64_C( 0xC070000000000000 ), /* negative, 113 */ - UINT64_C( 0xFFFE000000000000 ), /* negative, 16383 */ - UINT64_C( 0xFFFF000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f128QOut[f128NumQOut] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0001000000000000 ), /* positive, -16382 */ - UINT64_C( 0x0002000000000000 ), /* positive, -16381 */ - UINT64_C( 0x3BFE000000000000 ), /* positive, -1025 */ - UINT64_C( 0x3BFF000000000000 ), /* positive, -1024 */ - UINT64_C( 0x3C00000000000000 ), /* positive, -1023 */ - UINT64_C( 0x3C01000000000000 ), /* positive, -1022 */ - UINT64_C( 0x3F7E000000000000 ), /* positive, -129 */ - UINT64_C( 0x3F7F000000000000 ), /* positive, -128 */ - UINT64_C( 0x3F80000000000000 ), /* positive, -127 */ - UINT64_C( 0x3F81000000000000 ), /* positive, -126 */ - UINT64_C( 0x3F8E000000000000 ), /* positive, -113 */ - UINT64_C( 0x3FFB000000000000 ), /* positive, -4 */ - UINT64_C( 0x3FFC000000000000 ), /* positive, -3 */ - UINT64_C( 0x3FFD000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FFE000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FFF000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4001000000000000 ), /* positive, 2 */ - UINT64_C( 0x4002000000000000 ), /* positive, 3 */ - UINT64_C( 0x4003000000000000 ), /* positive, 4 */ - UINT64_C( 0x401C000000000000 ), /* positive, 29 */ - UINT64_C( 0x401D000000000000 ), /* positive, 30 */ - UINT64_C( 0x401E000000000000 ), /* positive, 31 */ - UINT64_C( 0x401F000000000000 ), /* positive, 32 */ - UINT64_C( 0x403C000000000000 ), /* positive, 61 */ - UINT64_C( 0x403D000000000000 ), /* positive, 62 */ - UINT64_C( 0x403E000000000000 ), /* positive, 63 */ - UINT64_C( 0x403F000000000000 ), /* positive, 64 */ - UINT64_C( 0x4070000000000000 ), /* positive, 113 */ - UINT64_C( 0x407E000000000000 ), /* positive, 127 */ - UINT64_C( 0x407F000000000000 ), /* positive, 128 */ - UINT64_C( 0x4080000000000000 ), /* positive, 129 */ - UINT64_C( 0x43FE000000000000 ), /* positive, 1023 */ - UINT64_C( 0x43FF000000000000 ), /* positive, 1024 */ - UINT64_C( 0x4400000000000000 ), /* positive, 1025 */ - UINT64_C( 0x7FFD000000000000 ), /* positive, 16382 */ - UINT64_C( 0x7FFE000000000000 ), /* positive, 16383 */ - UINT64_C( 0x7FFF000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8001000000000000 ), /* negative, -16382 */ - UINT64_C( 0x8002000000000000 ), /* negative, -16381 */ - UINT64_C( 0xBBFE000000000000 ), /* negative, -1025 */ - UINT64_C( 0xBBFF000000000000 ), /* negative, -1024 */ - UINT64_C( 0xBC00000000000000 ), /* negative, -1023 */ - UINT64_C( 0xBC01000000000000 ), /* negative, -1022 */ - UINT64_C( 0xBF7E000000000000 ), /* negative, -129 */ - UINT64_C( 0xBF7F000000000000 ), /* negative, -128 */ - UINT64_C( 0xBF80000000000000 ), /* negative, -127 */ - UINT64_C( 0xBF81000000000000 ), /* negative, -126 */ - UINT64_C( 0xBF8E000000000000 ), /* negative, -113 */ - UINT64_C( 0xBFFB000000000000 ), /* negative, -4 */ - UINT64_C( 0xBFFC000000000000 ), /* negative, -3 */ - UINT64_C( 0xBFFD000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFFE000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFFF000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC001000000000000 ), /* negative, 2 */ - UINT64_C( 0xC002000000000000 ), /* negative, 3 */ - UINT64_C( 0xC003000000000000 ), /* negative, 4 */ - UINT64_C( 0xC01C000000000000 ), /* negative, 29 */ - UINT64_C( 0xC01D000000000000 ), /* negative, 30 */ - UINT64_C( 0xC01E000000000000 ), /* negative, 31 */ - UINT64_C( 0xC01F000000000000 ), /* negative, 32 */ - UINT64_C( 0xC03C000000000000 ), /* negative, 61 */ - UINT64_C( 0xC03D000000000000 ), /* negative, 62 */ - UINT64_C( 0xC03E000000000000 ), /* negative, 63 */ - UINT64_C( 0xC03F000000000000 ), /* negative, 64 */ - UINT64_C( 0xC070000000000000 ), /* negative, 113 */ - UINT64_C( 0xC07E000000000000 ), /* negative, 127 */ - UINT64_C( 0xC07F000000000000 ), /* negative, 128 */ - UINT64_C( 0xC080000000000000 ), /* negative, 129 */ - UINT64_C( 0xC3FE000000000000 ), /* negative, 1023 */ - UINT64_C( 0xC3FF000000000000 ), /* negative, 1024 */ - UINT64_C( 0xC400000000000000 ), /* negative, 1025 */ - UINT64_C( 0xFFFD000000000000 ), /* negative, 16382 */ - UINT64_C( 0xFFFE000000000000 ), /* negative, 16383 */ - UINT64_C( 0xFFFF000000000000 ) /* negative, infinity or NaN */ -}; -static const struct { uint64_t v64, v0; } f128P1[f128NumP1] = { - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) } -}; -static const struct { uint64_t v64, v0; } f128P2[f128NumP2] = { - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000001 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000002 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000004 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000008 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000010 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000020 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000040 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000080 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000100 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000200 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000400 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000800 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000002000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000004000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000008000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000010000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000020000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000040000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000080000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000100000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000200000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000400000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000800000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000002000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000004000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000008000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000010000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000020000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000040000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000080000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000100000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000200000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000400000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000800000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000002000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000004000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000008000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000010000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000020000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000040000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000080000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000100000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000200000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000400000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000800000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0002000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0004000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0008000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0010000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0020000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0040000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0080000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0100000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0200000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0400000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0800000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x2000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x4000000000000000 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x8000000000000000 ) }, - { UINT64_C( 0x0000000000000001 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000002 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000004 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000008 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000010 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000020 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000040 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000080 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000100 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000200 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000400 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000000800 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000001000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000002000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000004000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000008000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000010000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000020000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000040000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000080000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000100000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000200000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000400000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000000800000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000001000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000002000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000004000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000008000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000010000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000020000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000040000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000080000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000100000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000200000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000400000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000000800000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000001000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000002000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000004000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000008000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000010000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000020000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000040000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000080000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000100000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000200000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000400000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000800000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000C00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000E00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000F00000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000F80000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FC0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FE0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FF0000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FF8000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFC000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFE000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFF000000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFF800000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFC00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFE00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFF00000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFF80000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFC0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFE0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFF0000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFF8000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFC000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFE000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFF000000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFF800000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFC00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFE00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFF00000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFF80000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFC0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFE0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFF0000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFF8000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFC000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFE000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFF000 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFF800 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFC00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFE00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFF00 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFF80 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFC0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFE0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFF0 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFF8 ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFC ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFE ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x0000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x8000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xC000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xE000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF000000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF800000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFC00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFE00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF00000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF80000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFC0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFE0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF0000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF8000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFC000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFE000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF000000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF800000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFC00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFE00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF00000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF80000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFC0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFE0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF0000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF8000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFC000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFE000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF000000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF800000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFC00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFE00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF00000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF80000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFC0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFE0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF0000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF8000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFC000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFE000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF000000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF800000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFC00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFE00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF00000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF80000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFC0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFE0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF0000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF8000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFC000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFE000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF000 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF800 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFC00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFE00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF00 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF80 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFC0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFE0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF0 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF8 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFC ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFE ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFD ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFB ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFF7 ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFEF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFDF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFBF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFF7F ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFEFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFDFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFBFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFF7FF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFEFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFDFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFBFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFF7FFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFEFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFDFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFBFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFF7FFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFEFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFDFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFBFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFF7FFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFEFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFDFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFBFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFF7FFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFEFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFDFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFBFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFF7FFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFEFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFDFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFBFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFF7FFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFEFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFDFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFFBFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFF7FFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFEFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFDFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFFBFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFF7FFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFEFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFDFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFFBFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFF7FFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFEFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFDFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFFBFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFF7FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFEFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFDFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFFBFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFF7FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFEFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFDFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xFBFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xF7FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xEFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xDFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0xBFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFF ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFD ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFFB ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFF7 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFEF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFDF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFFBF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFF7F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFEFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFDFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFFBFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFF7FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFEFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFDFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFFBFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFF7FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFEFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFDFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFFBFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFF7FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFEFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFDFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFFBFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFF7FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFEFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFDFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFFBFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFF7FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFEFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFDFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFFBFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFF7FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFEFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFDFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFFBFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFF7FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFEFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFDFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FFBFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FF7FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FEFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FDFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000FBFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000F7FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000EFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000DFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000BFFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00007FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00003FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00001FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000FFFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000007FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000003FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000001FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000FFFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000007FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000003FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000001FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000FFFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000007FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000003FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000001FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000FFFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000007FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000003FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000001FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000FFFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000007FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000003FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000001FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000FFFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000007FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000003FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000001FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000FFFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000007FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000003FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000001FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000FFFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000007FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000003FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000001FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000FFF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000007FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000003FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000001FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x00000000000000FF ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000007F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000003F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000001F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x000000000000000F ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000007 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000003 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000001 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0xFFFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x7FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x3FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x1FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0FFFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x07FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x03FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x01FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00FFFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x007FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x003FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x001FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000FFFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0007FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0003FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0001FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000FFFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00007FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00003FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00001FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000FFFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000007FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000003FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000001FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000FFFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000007FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000003FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000001FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000FFFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000007FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000003FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000001FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000FFFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000007FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000003FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000001FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000FFFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000007FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000003FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000001FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000FFFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000007FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000003FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000001FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000FFFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000007FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000003FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000001FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000FFFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000007FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000003FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000001FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000FFF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000007FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000003FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000001FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x00000000000000FF ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000007F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000003F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000001F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x000000000000000F ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000007 ) }, - { UINT64_C( 0x0000000000000000 ), UINT64_C( 0x0000000000000003 ) } -}; - -static const uint_fast64_t f128NumQInP1 = f128NumQIn * f128NumP1; -static const uint_fast64_t f128NumQOutP1 = f128NumQOut * f128NumP1; - -static void f128NextQInP1( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QIn[expNum] | f128P1[sigNum].v64; - uiZPtr->v0 = f128P1[sigNum].v0; - ++sigNum; - if ( f128NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128NextQOutP1( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QOut[expNum] | f128P1[sigNum].v64; - uiZPtr->v0 = f128P1[sigNum].v0; - ++sigNum; - if ( f128NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static const uint_fast64_t f128NumQInP2 = f128NumQIn * f128NumP2; -static const uint_fast64_t f128NumQOutP2 = f128NumQOut * f128NumP2; - -static void f128NextQInP2( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QIn[expNum] | f128P2[sigNum].v64; - uiZPtr->v0 = f128P2[sigNum].v0; - ++sigNum; - if ( f128NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128NextQOutP2( struct sequence *sequencePtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int expNum, sigNum; - - uiZPtr = (struct uint128 *) zPtr; - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uiZPtr->v64 = f128QOut[expNum] | f128P2[sigNum].v64; - uiZPtr->v0 = f128P2[sigNum].v0; - ++sigNum; - if ( f128NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f128NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - -} - -static void f128RandomQOutP3( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int sigNum1, sigNum2; - uint_fast64_t sig1_0; - - uiZPtr = (struct uint128 *) zPtr; - sigNum1 = randomN_ui16( f128NumP2 ); - sigNum2 = randomN_ui16( f128NumP2 ); - sig1_0 = f128P2[sigNum1].v0; - uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0; - uiZPtr->v64 = - f128QOut[randomN_ui8( f128NumQOut )] - | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0)) - & UINT64_C( 0x0000FFFFFFFFFFFF )); - -} - -static void f128RandomQOutPInf( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - - uiZPtr = (struct uint128 *) zPtr; - uiZPtr->v64 = - f128QOut[randomN_ui8( f128NumQOut )] - | (random_ui64() & UINT64_C( 0x0000FFFFFFFFFFFF )); - uiZPtr->v0 = random_ui64(); - -} - -enum { f128NumQInfWeightMasks = 14 }; -static const uint64_t f128QInfWeightMasks[f128NumQInfWeightMasks] = { - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xBFFF000000000000 ), - UINT64_C( 0x9FFF000000000000 ), - UINT64_C( 0x87FF000000000000 ), - UINT64_C( 0x87FF000000000000 ), - UINT64_C( 0x83FF000000000000 ), - UINT64_C( 0x81FF000000000000 ), - UINT64_C( 0x80FF000000000000 ), - UINT64_C( 0x807F000000000000 ), - UINT64_C( 0x803F000000000000 ), - UINT64_C( 0x801F000000000000 ), - UINT64_C( 0x800F000000000000 ), - UINT64_C( 0x8007000000000000 ) -}; -static const uint64_t f128QInfWeightOffsets[f128NumQInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x3000000000000000 ), - UINT64_C( 0x3800000000000000 ), - UINT64_C( 0x3C00000000000000 ), - UINT64_C( 0x3E00000000000000 ), - UINT64_C( 0x3F00000000000000 ), - UINT64_C( 0x3F80000000000000 ), - UINT64_C( 0x3FC0000000000000 ), - UINT64_C( 0x3FE0000000000000 ), - UINT64_C( 0x3FF0000000000000 ), - UINT64_C( 0x3FF8000000000000 ), - UINT64_C( 0x3FFC000000000000 ) -}; - -static void f128RandomQInfP3( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int sigNum1, sigNum2; - uint_fast64_t sig1_0; - int weightMaskNum; - - uiZPtr = (struct uint128 *) zPtr; - sigNum1 = randomN_ui16( f128NumP2 ); - sigNum2 = randomN_ui16( f128NumP2 ); - sig1_0 = f128P2[sigNum1].v0; - uiZPtr->v0 = sig1_0 + f128P2[sigNum2].v0; - weightMaskNum = randomN_ui8( f128NumQInfWeightMasks ); - uiZPtr->v64 = - (((uint_fast64_t) random_ui16()<<48 - & f128QInfWeightMasks[weightMaskNum]) - + f128QInfWeightOffsets[weightMaskNum]) - | ((f128P2[sigNum1].v64 + f128P2[sigNum2].v64 + (uiZPtr->v0 < sig1_0)) - & UINT64_C( 0x0000FFFFFFFFFFFF )); - -} - -static void f128RandomQInfPInf( float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - int weightMaskNum; - - uiZPtr = (struct uint128 *) zPtr; - weightMaskNum = randomN_ui8( f128NumQInfWeightMasks ); - uiZPtr->v64 = - (random_ui64() - & (f128QInfWeightMasks[weightMaskNum] - | UINT64_C( 0x0000FFFFFFFFFFFF ))) - + f128QInfWeightOffsets[weightMaskNum]; - uiZPtr->v0 = random_ui64(); - -} - -static void f128Random( float128_t *zPtr ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - f128RandomQOutP3( zPtr ); - break; - case 3: - f128RandomQOutPInf( zPtr ); - break; - case 4: - case 5: - case 6: - f128RandomQInfP3( zPtr ); - break; - case 7: - f128RandomQInfPInf( zPtr ); - break; - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float128_t currentA, currentB, currentC; -static int subcase; - -float128_t genCases_f128_a, genCases_f128_b, genCases_f128_c; - -void genCases_f128_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f128NumQOutP1 : 2 * f128NumQOutP2; - genCases_done = false; - -} - -void genCases_f128_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - f128Random( &genCases_f128_a ); - break; - case 2: - f128NextQOutP1( &sequenceA, &genCases_f128_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - break; - case 1: - f128NextQOutP2( &sequenceA, &genCases_f128_a ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f128_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f128NumQInP1 * f128NumQInP1; - f128NextQInP1( &sequenceA, ¤tA ); - } else { - genCases_total = 2 * f128NumQInP2 * f128NumQInP2; - f128NextQInP2( &sequenceA, ¤tA ); - } - genCases_done = false; - -} - -void genCases_f128_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP1( &sequenceA, ¤tA ); - } - f128NextQInP1( &sequenceB, ¤tB ); - case 2: - case 4: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - break; - case 1: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - break; - case 3: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - break; - case 5: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP2( &sequenceA, ¤tA ); - } - genCases_f128_a = currentA; - f128NextQInP2( &sequenceB, &genCases_f128_b ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f128_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f128NumQInP1 * f128NumQInP1 * f128NumQInP1; - f128NextQInP1( &sequenceA, ¤tA ); - f128NextQInP1( &sequenceB, ¤tB ); - } else { - genCases_total = 2 * f128NumQInP2 * f128NumQInP2 * f128NumQInP2; - f128NextQInP2( &sequenceA, ¤tA ); - f128NextQInP2( &sequenceB, ¤tB ); - } - genCases_done = false; - -} - -void genCases_f128_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP1( &sequenceA, ¤tA ); - } - f128NextQInP1( &sequenceB, ¤tB ); - } - f128NextQInP1( &sequenceC, ¤tC ); - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - genCases_f128_c = currentC; - break; - case 1: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - f128Random( &genCases_f128_c ); - break; - case 2: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 3: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - genCases_f128_c = currentC; - break; - case 4: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 5: - f128Random( &genCases_f128_a ); - genCases_f128_b = currentB; - f128Random( &genCases_f128_c ); - break; - case 6: - genCases_f128_a = currentA; - f128Random( &genCases_f128_b ); - genCases_f128_c = currentC; - break; - case 7: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 8: - genCases_f128_a = currentA; - genCases_f128_b = currentB; - genCases_f128_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - f128Random( &genCases_f128_a ); - f128Random( &genCases_f128_b ); - f128Random( &genCases_f128_c ); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - f128NextQInP2( &sequenceA, ¤tA ); - } - f128NextQInP2( &sequenceB, ¤tB ); - } - genCases_f128_a = currentA; - genCases_f128_b = currentB; - f128NextQInP2( &sequenceC, &genCases_f128_c ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f16.c b/addins/TestFloat-3e/source/genCases_f16.c deleted file mode 100644 index dd2ebbce4..000000000 --- a/addins/TestFloat-3e/source/genCases_f16.c +++ /dev/null @@ -1,585 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT16 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui16_f16 { uint16_t ui; float16_t f; }; - -enum { - f16NumQIn = 22, - f16NumQOut = 34, - f16NumP1 = 4, - f16NumP2 = 36 -}; -static const uint16_t f16QIn[f16NumQIn] = { - 0x0000, /* positive, subnormal */ - 0x0400, /* positive, -14 */ - 0x1000, /* positive, -11 */ - 0x3400, /* positive, -2 */ - 0x3800, /* positive, -1 */ - 0x3C00, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4400, /* positive, 2 */ - 0x6800, /* positive, 11 */ - 0x7800, /* positive, 15 */ - 0x7C00, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8400, /* negative, -14 */ - 0x9000, /* negative, -11 */ - 0xB400, /* negative, -2 */ - 0xB800, /* negative, -1 */ - 0xBC00, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC400, /* negative, 2 */ - 0xE800, /* negative, 11 */ - 0xF800, /* negative, 15 */ - 0xFC00 /* negative, infinity or NaN */ -}; -static const uint16_t f16QOut[f16NumQOut] = { - 0x0000, /* positive, subnormal */ - 0x0400, /* positive, -14 */ - 0x0800, /* positive, -13 */ - 0x1000, /* positive, -11 */ - 0x2C00, /* positive, -4 */ - 0x3000, /* positive, -3 */ - 0x3400, /* positive, -2 */ - 0x3800, /* positive, -1 */ - 0x3C00, /* positive, 0 */ - 0x4000, /* positive, 1 */ - 0x4400, /* positive, 2 */ - 0x4800, /* positive, 3 */ - 0x4C00, /* positive, 4 */ - 0x6800, /* positive, 11 */ - 0x7400, /* positive, 14 */ - 0x7800, /* positive, 15 */ - 0x7C00, /* positive, infinity or NaN */ - 0x8000, /* negative, subnormal */ - 0x8400, /* negative, -14 */ - 0x8800, /* negative, -13 */ - 0x9000, /* negative, -11 */ - 0xAC00, /* negative, -4 */ - 0xB000, /* negative, -3 */ - 0xB400, /* negative, -2 */ - 0xB800, /* negative, -1 */ - 0xBC00, /* negative, 0 */ - 0xC000, /* negative, 1 */ - 0xC400, /* negative, 2 */ - 0xC800, /* negative, 3 */ - 0xCC00, /* negative, 4 */ - 0xE800, /* negative, 11 */ - 0xF400, /* negative, 14 */ - 0xF800, /* negative, 15 */ - 0xFC00 /* negative, infinity or NaN */ -}; -static const uint16_t f16P1[f16NumP1] = { - 0x0000, - 0x0001, - 0x03FF, - 0x03FE -}; -static const uint16_t f16P2[f16NumP2] = { - 0x0000, - 0x0001, - 0x0002, - 0x0004, - 0x0008, - 0x0010, - 0x0020, - 0x0040, - 0x0080, - 0x0100, - 0x0200, - 0x0300, - 0x0380, - 0x03C0, - 0x03E0, - 0x03F0, - 0x03F8, - 0x03FC, - 0x03FE, - 0x03FF, - 0x03FD, - 0x03FB, - 0x03F7, - 0x03EF, - 0x03DF, - 0x03BF, - 0x037F, - 0x02FF, - 0x01FF, - 0x00FF, - 0x007F, - 0x003F, - 0x001F, - 0x000F, - 0x0007, - 0x0003 -}; - -static const uint_fast64_t f16NumQInP1 = f16NumQIn * f16NumP1; -static const uint_fast64_t f16NumQOutP1 = f16NumQOut * f16NumP1; - -static float16_t f16NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QIn[expNum] | f16P1[sigNum]; - ++sigNum; - if ( f16NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QOut[expNum] | f16P1[sigNum]; - ++sigNum; - if ( f16NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f16NumQInP2 = f16NumQIn * f16NumP2; -static const uint_fast64_t f16NumQOutP2 = f16NumQOut * f16NumP2; - -static float16_t f16NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QIn[expNum] | f16P2[sigNum]; - ++sigNum; - if ( f16NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui16_f16 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f16QOut[expNum] | f16P2[sigNum]; - ++sigNum; - if ( f16NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f16NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float16_t f16RandomQOutP3( void ) -{ - union ui16_f16 uZ; - - uZ.ui = - f16QOut[randomN_ui8( f16NumQOut )] - | ((f16P2[randomN_ui8( f16NumP2 )] + f16P2[randomN_ui8( f16NumP2 )]) - & 0x03FF); - return uZ.f; - -} - -static float16_t f16RandomQOutPInf( void ) -{ - union ui16_f16 uZ; - - uZ.ui = f16QOut[randomN_ui8( f16NumQOut )] | (random_ui16() & 0x03FF); - return uZ.f; - -} - -enum { f16NumQInfWeightMasks = 4 }; -static const uint16_t f16QInfWeightMasks[f16NumQInfWeightMasks] = - { 0xFC00, 0xFC00, 0xBC00, 0x9C00 }; -static const uint16_t f16QInfWeightOffsets[f16NumQInfWeightMasks] = - { 0x0000, 0x0000, 0x2000, 0x3000 }; - -static float16_t f16RandomQInfP3( void ) -{ - int weightMaskNum; - union ui16_f16 uZ; - - weightMaskNum = randomN_ui8( f16NumQInfWeightMasks ); - uZ.ui = - ((random_ui16() & f16QInfWeightMasks[weightMaskNum]) - + f16QInfWeightOffsets[weightMaskNum]) - | ((f16P2[randomN_ui8( f16NumP2 )] + f16P2[randomN_ui8( f16NumP2 )]) - & 0x03FF); - return uZ.f; - -} - -static float16_t f16RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui16_f16 uZ; - - weightMaskNum = randomN_ui8( f16NumQInfWeightMasks ); - uZ.ui = - (random_ui16() & (f16QInfWeightMasks[weightMaskNum] | 0x03FF)) - + f16QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float16_t f16Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f16RandomQOutP3(); - case 3: - return f16RandomQOutPInf(); - case 4: - case 5: - case 6: - return f16RandomQInfP3(); - case 7: - return f16RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float16_t currentA, currentB, currentC; -static int subcase; - -float16_t genCases_f16_a, genCases_f16_b, genCases_f16_c; - -void genCases_f16_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f16NumQOutP1 : 2 * f16NumQOutP2; - genCases_done = false; - -} - -void genCases_f16_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f16_a = f16Random(); - break; - case 2: - genCases_f16_a = f16NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - break; - case 1: - genCases_f16_a = f16NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f16_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f16NumQInP1 * f16NumQInP1; - currentA = f16NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f16NumQInP2 * f16NumQInP2; - currentA = f16NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f16_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP1( &sequenceA ); - } - currentB = f16NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - break; - case 1: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - break; - case 3: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - break; - case 5: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP2( &sequenceA ); - } - genCases_f16_a = currentA; - genCases_f16_b = f16NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f16_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f16NumQInP1 * f16NumQInP1 * f16NumQInP1; - currentA = f16NextQInP1( &sequenceA ); - currentB = f16NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f16NumQInP2 * f16NumQInP2 * f16NumQInP2; - currentA = f16NextQInP2( &sequenceA ); - currentB = f16NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f16_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP1( &sequenceA ); - } - currentB = f16NextQInP1( &sequenceB ); - } - currentC = f16NextQInP1( &sequenceC ); - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = currentC; - break; - case 1: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = f16Random(); - break; - case 2: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 3: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - genCases_f16_c = currentC; - break; - case 4: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 5: - genCases_f16_a = f16Random(); - genCases_f16_b = currentB; - genCases_f16_c = f16Random(); - break; - case 6: - genCases_f16_a = currentA; - genCases_f16_b = f16Random(); - genCases_f16_c = currentC; - break; - case 7: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 8: - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f16_a = f16Random(); - genCases_f16_b = f16Random(); - genCases_f16_c = f16Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f16NextQInP2( &sequenceA ); - } - currentB = f16NextQInP2( &sequenceB ); - } - genCases_f16_a = currentA; - genCases_f16_b = currentB; - genCases_f16_c = f16NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_f32.c b/addins/TestFloat-3e/source/genCases_f32.c deleted file mode 100644 index bb08ae902..000000000 --- a/addins/TestFloat-3e/source/genCases_f32.c +++ /dev/null @@ -1,664 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui32_f32 { uint32_t ui; float32_t f; }; - -enum { - f32NumQIn = 22, - f32NumQOut = 50, - f32NumP1 = 4, - f32NumP2 = 88 -}; -static const uint32_t f32QIn[f32NumQIn] = { - 0x00000000, /* positive, subnormal */ - 0x00800000, /* positive, -126 */ - 0x33800000, /* positive, -24 */ - 0x3E800000, /* positive, -2 */ - 0x3F000000, /* positive, -1 */ - 0x3F800000, /* positive, 0 */ - 0x40000000, /* positive, 1 */ - 0x40800000, /* positive, 2 */ - 0x4B800000, /* positive, 24 */ - 0x7F000000, /* positive, 127 */ - 0x7F800000, /* positive, infinity or NaN */ - 0x80000000, /* negative, subnormal */ - 0x80800000, /* negative, -126 */ - 0xB3800000, /* negative, -24 */ - 0xBE800000, /* negative, -2 */ - 0xBF000000, /* negative, -1 */ - 0xBF800000, /* negative, 0 */ - 0xC0000000, /* negative, 1 */ - 0xC0800000, /* negative, 2 */ - 0xCB800000, /* negative, 24 */ - 0xFE800000, /* negative, 126 */ - 0xFF800000 /* negative, infinity or NaN */ -}; -static const uint32_t f32QOut[f32NumQOut] = { - 0x00000000, /* positive, subnormal */ - 0x00800000, /* positive, -126 */ - 0x01000000, /* positive, -125 */ - 0x33800000, /* positive, -24 */ - 0x3D800000, /* positive, -4 */ - 0x3E000000, /* positive, -3 */ - 0x3E800000, /* positive, -2 */ - 0x3F000000, /* positive, -1 */ - 0x3F800000, /* positive, 0 */ - 0x40000000, /* positive, 1 */ - 0x40800000, /* positive, 2 */ - 0x41000000, /* positive, 3 */ - 0x41800000, /* positive, 4 */ - 0x4B800000, /* positive, 24 */ - 0x4E000000, /* positive, 29 */ - 0x4E800000, /* positive, 30 */ - 0x4F000000, /* positive, 31 */ - 0x4F800000, /* positive, 32 */ - 0x5E000000, /* positive, 61 */ - 0x5E800000, /* positive, 62 */ - 0x5F000000, /* positive, 63 */ - 0x5F800000, /* positive, 64 */ - 0x7E800000, /* positive, 126 */ - 0x7F000000, /* positive, 127 */ - 0x7F800000, /* positive, infinity or NaN */ - 0x80000000, /* negative, subnormal */ - 0x80800000, /* negative, -126 */ - 0x81000000, /* negative, -125 */ - 0xB3800000, /* negative, -24 */ - 0xBD800000, /* negative, -4 */ - 0xBE000000, /* negative, -3 */ - 0xBE800000, /* negative, -2 */ - 0xBF000000, /* negative, -1 */ - 0xBF800000, /* negative, 0 */ - 0xC0000000, /* negative, 1 */ - 0xC0800000, /* negative, 2 */ - 0xC1000000, /* negative, 3 */ - 0xC1800000, /* negative, 4 */ - 0xCB800000, /* negative, 24 */ - 0xCE000000, /* negative, 29 */ - 0xCE800000, /* negative, 30 */ - 0xCF000000, /* negative, 31 */ - 0xCF800000, /* negative, 32 */ - 0xDE000000, /* negative, 61 */ - 0xDE800000, /* negative, 62 */ - 0xDF000000, /* negative, 63 */ - 0xDF800000, /* negative, 64 */ - 0xFE800000, /* negative, 126 */ - 0xFF000000, /* negative, 127 */ - 0xFF800000 /* negative, infinity or NaN */ -}; -static const uint32_t f32P1[f32NumP1] = { - 0x00000000, - 0x00000001, - 0x007FFFFF, - 0x007FFFFE -}; -static const uint32_t f32P2[f32NumP2] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00600000, - 0x00700000, - 0x00780000, - 0x007C0000, - 0x007E0000, - 0x007F0000, - 0x007F8000, - 0x007FC000, - 0x007FE000, - 0x007FF000, - 0x007FF800, - 0x007FFC00, - 0x007FFE00, - 0x007FFF00, - 0x007FFF80, - 0x007FFFC0, - 0x007FFFE0, - 0x007FFFF0, - 0x007FFFF8, - 0x007FFFFC, - 0x007FFFFE, - 0x007FFFFF, - 0x007FFFFD, - 0x007FFFFB, - 0x007FFFF7, - 0x007FFFEF, - 0x007FFFDF, - 0x007FFFBF, - 0x007FFF7F, - 0x007FFEFF, - 0x007FFDFF, - 0x007FFBFF, - 0x007FF7FF, - 0x007FEFFF, - 0x007FDFFF, - 0x007FBFFF, - 0x007F7FFF, - 0x007EFFFF, - 0x007DFFFF, - 0x007BFFFF, - 0x0077FFFF, - 0x006FFFFF, - 0x005FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static const uint_fast64_t f32NumQInP1 = f32NumQIn * f32NumP1; -static const uint_fast64_t f32NumQOutP1 = f32NumQOut * f32NumP1; - -static float32_t f32NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QIn[expNum] | f32P1[sigNum]; - ++sigNum; - if ( f32NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QOut[expNum] | f32P1[sigNum]; - ++sigNum; - if ( f32NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f32NumQInP2 = f32NumQIn * f32NumP2; -static const uint_fast64_t f32NumQOutP2 = f32NumQOut * f32NumP2; - -static float32_t f32NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QIn[expNum] | f32P2[sigNum]; - ++sigNum; - if ( f32NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui32_f32 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f32QOut[expNum] | f32P2[sigNum]; - ++sigNum; - if ( f32NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f32NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float32_t f32RandomQOutP3( void ) -{ - union ui32_f32 uZ; - - uZ.ui = - f32QOut[randomN_ui8( f32NumQOut )] - | ((f32P2[randomN_ui8( f32NumP2 )] + f32P2[randomN_ui8( f32NumP2 )]) - & 0x007FFFFF); - return uZ.f; - -} - -static float32_t f32RandomQOutPInf( void ) -{ - union ui32_f32 uZ; - - uZ.ui = f32QOut[randomN_ui8( f32NumQOut )] | (random_ui32() & 0x007FFFFF); - return uZ.f; - -} - -enum { f32NumQInfWeightMasks = 7 }; -static const uint32_t f32QInfWeightMasks[f32NumQInfWeightMasks] = { - 0xFF800000, - 0xFF800000, - 0xBF800000, - 0x9F800000, - 0x8F800000, - 0x87800000, - 0x83800000 -}; -static const uint32_t f32QInfWeightOffsets[f32NumQInfWeightMasks] = { - 0x00000000, - 0x00000000, - 0x20000000, - 0x30000000, - 0x38000000, - 0x3C000000, - 0x3E000000 -}; - -static float32_t f32RandomQInfP3( void ) -{ - int weightMaskNum; - union ui32_f32 uZ; - - weightMaskNum = randomN_ui8( f32NumQInfWeightMasks ); - uZ.ui = - (((uint_fast32_t) random_ui16()<<16 - & f32QInfWeightMasks[weightMaskNum]) - + f32QInfWeightOffsets[weightMaskNum]) - | ((f32P2[randomN_ui8( f32NumP2 )] + f32P2[randomN_ui8( f32NumP2 )]) - & 0x007FFFFF); - return uZ.f; - -} - -static float32_t f32RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui32_f32 uZ; - - weightMaskNum = randomN_ui8( f32NumQInfWeightMasks ); - uZ.ui = - (random_ui32() & (f32QInfWeightMasks[weightMaskNum] | 0x007FFFFF)) - + f32QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float32_t f32Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f32RandomQOutP3(); - case 3: - return f32RandomQOutPInf(); - case 4: - case 5: - case 6: - return f32RandomQInfP3(); - case 7: - return f32RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float32_t currentA, currentB, currentC; -static int subcase; - -float32_t genCases_f32_a, genCases_f32_b, genCases_f32_c; - -void genCases_f32_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f32NumQOutP1 : 2 * f32NumQOutP2; - genCases_done = false; - -} - -void genCases_f32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f32_a = f32Random(); - break; - case 2: - genCases_f32_a = f32NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - break; - case 1: - genCases_f32_a = f32NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f32_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f32NumQInP1 * f32NumQInP1; - currentA = f32NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f32NumQInP2 * f32NumQInP2; - currentA = f32NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f32_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP1( &sequenceA ); - } - currentB = f32NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - break; - case 1: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - break; - case 3: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - break; - case 5: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP2( &sequenceA ); - } - genCases_f32_a = currentA; - genCases_f32_b = f32NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f32_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f32NumQInP1 * f32NumQInP1 * f32NumQInP1; - currentA = f32NextQInP1( &sequenceA ); - currentB = f32NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f32NumQInP2 * f32NumQInP2 * f32NumQInP2; - currentA = f32NextQInP2( &sequenceA ); - currentB = f32NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f32_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP1( &sequenceA ); - } - currentB = f32NextQInP1( &sequenceB ); - } - currentC = f32NextQInP1( &sequenceC ); - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = currentC; - break; - case 1: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = f32Random(); - break; - case 2: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 3: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - genCases_f32_c = currentC; - break; - case 4: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 5: - genCases_f32_a = f32Random(); - genCases_f32_b = currentB; - genCases_f32_c = f32Random(); - break; - case 6: - genCases_f32_a = currentA; - genCases_f32_b = f32Random(); - genCases_f32_c = currentC; - break; - case 7: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 8: - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f32_a = f32Random(); - genCases_f32_b = f32Random(); - genCases_f32_c = f32Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f32NextQInP2( &sequenceA ); - } - currentB = f32NextQInP2( &sequenceB ); - } - genCases_f32_a = currentA; - genCases_f32_b = currentB; - genCases_f32_c = f32NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_f64.c b/addins/TestFloat-3e/source/genCases_f64.c deleted file mode 100644 index 61b34dc2e..000000000 --- a/addins/TestFloat-3e/source/genCases_f64.c +++ /dev/null @@ -1,808 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "softfloat.h" -#include "genCases.h" - -#ifdef FLOAT64 - -struct sequence { - int expNum, term1Num, term2Num; - bool done; -}; - -union ui64_f64 { uint64_t ui; float64_t f; }; - -enum { - f64NumQIn = 22, - f64NumQOut = 64, - f64NumP1 = 4, - f64NumP2 = 204 -}; -static const uint64_t f64QIn[f64NumQIn] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0010000000000000 ), /* positive, -1022 */ - UINT64_C( 0x3CA0000000000000 ), /* positive, -53 */ - UINT64_C( 0x3FD0000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FE0000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FF0000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4010000000000000 ), /* positive, 2 */ - UINT64_C( 0x4340000000000000 ), /* positive, 53 */ - UINT64_C( 0x7FE0000000000000 ), /* positive, 1023 */ - UINT64_C( 0x7FF0000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8010000000000000 ), /* negative, -1022 */ - UINT64_C( 0xBCA0000000000000 ), /* negative, -53 */ - UINT64_C( 0xBFD0000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFE0000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFF0000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC010000000000000 ), /* negative, 2 */ - UINT64_C( 0xC340000000000000 ), /* negative, 53 */ - UINT64_C( 0xFFE0000000000000 ), /* negative, 1023 */ - UINT64_C( 0xFFF0000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f64QOut[f64NumQOut] = { - UINT64_C( 0x0000000000000000 ), /* positive, subnormal */ - UINT64_C( 0x0010000000000000 ), /* positive, -1022 */ - UINT64_C( 0x0020000000000000 ), /* positive, -1021 */ - UINT64_C( 0x37E0000000000000 ), /* positive, -129 */ - UINT64_C( 0x37F0000000000000 ), /* positive, -128 */ - UINT64_C( 0x3800000000000000 ), /* positive, -127 */ - UINT64_C( 0x3810000000000000 ), /* positive, -126 */ - UINT64_C( 0x3CA0000000000000 ), /* positive, -53 */ - UINT64_C( 0x3FB0000000000000 ), /* positive, -4 */ - UINT64_C( 0x3FC0000000000000 ), /* positive, -3 */ - UINT64_C( 0x3FD0000000000000 ), /* positive, -2 */ - UINT64_C( 0x3FE0000000000000 ), /* positive, -1 */ - UINT64_C( 0x3FF0000000000000 ), /* positive, 0 */ - UINT64_C( 0x4000000000000000 ), /* positive, 1 */ - UINT64_C( 0x4010000000000000 ), /* positive, 2 */ - UINT64_C( 0x4020000000000000 ), /* positive, 3 */ - UINT64_C( 0x4030000000000000 ), /* positive, 4 */ - UINT64_C( 0x41C0000000000000 ), /* positive, 29 */ - UINT64_C( 0x41D0000000000000 ), /* positive, 30 */ - UINT64_C( 0x41E0000000000000 ), /* positive, 31 */ - UINT64_C( 0x41F0000000000000 ), /* positive, 32 */ - UINT64_C( 0x4340000000000000 ), /* positive, 53 */ - UINT64_C( 0x43C0000000000000 ), /* positive, 61 */ - UINT64_C( 0x43D0000000000000 ), /* positive, 62 */ - UINT64_C( 0x43E0000000000000 ), /* positive, 63 */ - UINT64_C( 0x43F0000000000000 ), /* positive, 64 */ - UINT64_C( 0x47E0000000000000 ), /* positive, 127 */ - UINT64_C( 0x47F0000000000000 ), /* positive, 128 */ - UINT64_C( 0x4800000000000000 ), /* positive, 129 */ - UINT64_C( 0x7FD0000000000000 ), /* positive, 1022 */ - UINT64_C( 0x7FE0000000000000 ), /* positive, 1023 */ - UINT64_C( 0x7FF0000000000000 ), /* positive, infinity or NaN */ - UINT64_C( 0x8000000000000000 ), /* negative, subnormal */ - UINT64_C( 0x8010000000000000 ), /* negative, -1022 */ - UINT64_C( 0x8020000000000000 ), /* negative, -1021 */ - UINT64_C( 0xB7E0000000000000 ), /* negative, -129 */ - UINT64_C( 0xB7F0000000000000 ), /* negative, -128 */ - UINT64_C( 0xB800000000000000 ), /* negative, -127 */ - UINT64_C( 0xB810000000000000 ), /* negative, -126 */ - UINT64_C( 0xBCA0000000000000 ), /* negative, -53 */ - UINT64_C( 0xBFB0000000000000 ), /* negative, -4 */ - UINT64_C( 0xBFC0000000000000 ), /* negative, -3 */ - UINT64_C( 0xBFD0000000000000 ), /* negative, -2 */ - UINT64_C( 0xBFE0000000000000 ), /* negative, -1 */ - UINT64_C( 0xBFF0000000000000 ), /* negative, 0 */ - UINT64_C( 0xC000000000000000 ), /* negative, 1 */ - UINT64_C( 0xC010000000000000 ), /* negative, 2 */ - UINT64_C( 0xC020000000000000 ), /* negative, 3 */ - UINT64_C( 0xC030000000000000 ), /* negative, 4 */ - UINT64_C( 0xC1C0000000000000 ), /* negative, 29 */ - UINT64_C( 0xC1D0000000000000 ), /* negative, 30 */ - UINT64_C( 0xC1E0000000000000 ), /* negative, 31 */ - UINT64_C( 0xC1F0000000000000 ), /* negative, 32 */ - UINT64_C( 0xC340000000000000 ), /* negative, 53 */ - UINT64_C( 0xC3C0000000000000 ), /* negative, 61 */ - UINT64_C( 0xC3D0000000000000 ), /* negative, 62 */ - UINT64_C( 0xC3E0000000000000 ), /* negative, 63 */ - UINT64_C( 0xC3F0000000000000 ), /* negative, 64 */ - UINT64_C( 0xC7E0000000000000 ), /* negative, 127 */ - UINT64_C( 0xC7F0000000000000 ), /* negative, 128 */ - UINT64_C( 0xC800000000000000 ), /* negative, 129 */ - UINT64_C( 0xFFD0000000000000 ), /* negative, 1022 */ - UINT64_C( 0xFFE0000000000000 ), /* negative, 1023 */ - UINT64_C( 0xFFF0000000000000 ) /* negative, infinity or NaN */ -}; -static const uint64_t f64P1[f64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFE ) -}; -static const uint64_t f64P2[f64NumP2] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x000C000000000000 ), - UINT64_C( 0x000E000000000000 ), - UINT64_C( 0x000F000000000000 ), - UINT64_C( 0x000F800000000000 ), - UINT64_C( 0x000FC00000000000 ), - UINT64_C( 0x000FE00000000000 ), - UINT64_C( 0x000FF00000000000 ), - UINT64_C( 0x000FF80000000000 ), - UINT64_C( 0x000FFC0000000000 ), - UINT64_C( 0x000FFE0000000000 ), - UINT64_C( 0x000FFF0000000000 ), - UINT64_C( 0x000FFF8000000000 ), - UINT64_C( 0x000FFFC000000000 ), - UINT64_C( 0x000FFFE000000000 ), - UINT64_C( 0x000FFFF000000000 ), - UINT64_C( 0x000FFFF800000000 ), - UINT64_C( 0x000FFFFC00000000 ), - UINT64_C( 0x000FFFFE00000000 ), - UINT64_C( 0x000FFFFF00000000 ), - UINT64_C( 0x000FFFFF80000000 ), - UINT64_C( 0x000FFFFFC0000000 ), - UINT64_C( 0x000FFFFFE0000000 ), - UINT64_C( 0x000FFFFFF0000000 ), - UINT64_C( 0x000FFFFFF8000000 ), - UINT64_C( 0x000FFFFFFC000000 ), - UINT64_C( 0x000FFFFFFE000000 ), - UINT64_C( 0x000FFFFFFF000000 ), - UINT64_C( 0x000FFFFFFF800000 ), - UINT64_C( 0x000FFFFFFFC00000 ), - UINT64_C( 0x000FFFFFFFE00000 ), - UINT64_C( 0x000FFFFFFFF00000 ), - UINT64_C( 0x000FFFFFFFF80000 ), - UINT64_C( 0x000FFFFFFFFC0000 ), - UINT64_C( 0x000FFFFFFFFE0000 ), - UINT64_C( 0x000FFFFFFFFF0000 ), - UINT64_C( 0x000FFFFFFFFF8000 ), - UINT64_C( 0x000FFFFFFFFFC000 ), - UINT64_C( 0x000FFFFFFFFFE000 ), - UINT64_C( 0x000FFFFFFFFFF000 ), - UINT64_C( 0x000FFFFFFFFFF800 ), - UINT64_C( 0x000FFFFFFFFFFC00 ), - UINT64_C( 0x000FFFFFFFFFFE00 ), - UINT64_C( 0x000FFFFFFFFFFF00 ), - UINT64_C( 0x000FFFFFFFFFFF80 ), - UINT64_C( 0x000FFFFFFFFFFFC0 ), - UINT64_C( 0x000FFFFFFFFFFFE0 ), - UINT64_C( 0x000FFFFFFFFFFFF0 ), - UINT64_C( 0x000FFFFFFFFFFFF8 ), - UINT64_C( 0x000FFFFFFFFFFFFC ), - UINT64_C( 0x000FFFFFFFFFFFFE ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFD ), - UINT64_C( 0x000FFFFFFFFFFFFB ), - UINT64_C( 0x000FFFFFFFFFFFF7 ), - UINT64_C( 0x000FFFFFFFFFFFEF ), - UINT64_C( 0x000FFFFFFFFFFFDF ), - UINT64_C( 0x000FFFFFFFFFFFBF ), - UINT64_C( 0x000FFFFFFFFFFF7F ), - UINT64_C( 0x000FFFFFFFFFFEFF ), - UINT64_C( 0x000FFFFFFFFFFDFF ), - UINT64_C( 0x000FFFFFFFFFFBFF ), - UINT64_C( 0x000FFFFFFFFFF7FF ), - UINT64_C( 0x000FFFFFFFFFEFFF ), - UINT64_C( 0x000FFFFFFFFFDFFF ), - UINT64_C( 0x000FFFFFFFFFBFFF ), - UINT64_C( 0x000FFFFFFFFF7FFF ), - UINT64_C( 0x000FFFFFFFFEFFFF ), - UINT64_C( 0x000FFFFFFFFDFFFF ), - UINT64_C( 0x000FFFFFFFFBFFFF ), - UINT64_C( 0x000FFFFFFFF7FFFF ), - UINT64_C( 0x000FFFFFFFEFFFFF ), - UINT64_C( 0x000FFFFFFFDFFFFF ), - UINT64_C( 0x000FFFFFFFBFFFFF ), - UINT64_C( 0x000FFFFFFF7FFFFF ), - UINT64_C( 0x000FFFFFFEFFFFFF ), - UINT64_C( 0x000FFFFFFDFFFFFF ), - UINT64_C( 0x000FFFFFFBFFFFFF ), - UINT64_C( 0x000FFFFFF7FFFFFF ), - UINT64_C( 0x000FFFFFEFFFFFFF ), - UINT64_C( 0x000FFFFFDFFFFFFF ), - UINT64_C( 0x000FFFFFBFFFFFFF ), - UINT64_C( 0x000FFFFF7FFFFFFF ), - UINT64_C( 0x000FFFFEFFFFFFFF ), - UINT64_C( 0x000FFFFDFFFFFFFF ), - UINT64_C( 0x000FFFFBFFFFFFFF ), - UINT64_C( 0x000FFFF7FFFFFFFF ), - UINT64_C( 0x000FFFEFFFFFFFFF ), - UINT64_C( 0x000FFFDFFFFFFFFF ), - UINT64_C( 0x000FFFBFFFFFFFFF ), - UINT64_C( 0x000FFF7FFFFFFFFF ), - UINT64_C( 0x000FFEFFFFFFFFFF ), - UINT64_C( 0x000FFDFFFFFFFFFF ), - UINT64_C( 0x000FFBFFFFFFFFFF ), - UINT64_C( 0x000FF7FFFFFFFFFF ), - UINT64_C( 0x000FEFFFFFFFFFFF ), - UINT64_C( 0x000FDFFFFFFFFFFF ), - UINT64_C( 0x000FBFFFFFFFFFFF ), - UINT64_C( 0x000F7FFFFFFFFFFF ), - UINT64_C( 0x000EFFFFFFFFFFFF ), - UINT64_C( 0x000DFFFFFFFFFFFF ), - UINT64_C( 0x000BFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static const uint_fast64_t f64NumQInP1 = f64NumQIn * f64NumP1; -static const uint_fast64_t f64NumQOutP1 = f64NumQOut * f64NumP1; - -static float64_t f64NextQInP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QIn[expNum] | f64P1[sigNum]; - ++sigNum; - if ( f64NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64NextQOutP1( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QOut[expNum] | f64P1[sigNum]; - ++sigNum; - if ( f64NumP1 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static const uint_fast64_t f64NumQInP2 = f64NumQIn * f64NumP2; -static const uint_fast64_t f64NumQOutP2 = f64NumQOut * f64NumP2; - -static float64_t f64NextQInP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QIn[expNum] | f64P2[sigNum]; - ++sigNum; - if ( f64NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQIn <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64NextQOutP2( struct sequence *sequencePtr ) -{ - int expNum, sigNum; - union ui64_f64 uZ; - - expNum = sequencePtr->expNum; - sigNum = sequencePtr->term1Num; - uZ.ui = f64QOut[expNum] | f64P2[sigNum]; - ++sigNum; - if ( f64NumP2 <= sigNum ) { - sigNum = 0; - ++expNum; - if ( f64NumQOut <= expNum ) { - expNum = 0; - sequencePtr->done = true; - } - sequencePtr->expNum = expNum; - } - sequencePtr->term1Num = sigNum; - return uZ.f; - -} - -static float64_t f64RandomQOutP3( void ) -{ - union ui64_f64 uZ; - - uZ.ui = - f64QOut[randomN_ui8( f64NumQOut )] - | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )]) - & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -static float64_t f64RandomQOutPInf( void ) -{ - union ui64_f64 uZ; - - uZ.ui = - f64QOut[randomN_ui8( f64NumQOut )] - | (random_ui64() & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -enum { f64NumQInfWeightMasks = 10 }; -static const uint64_t f64QInfWeightMasks[f64NumQInfWeightMasks] = { - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xBFF0000000000000 ), - UINT64_C( 0x9FF0000000000000 ), - UINT64_C( 0x8FF0000000000000 ), - UINT64_C( 0x87F0000000000000 ), - UINT64_C( 0x83F0000000000000 ), - UINT64_C( 0x81F0000000000000 ), - UINT64_C( 0x80F0000000000000 ), - UINT64_C( 0x8070000000000000 ) -}; -static const uint64_t f64QInfWeightOffsets[f64NumQInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x3000000000000000 ), - UINT64_C( 0x3800000000000000 ), - UINT64_C( 0x3C00000000000000 ), - UINT64_C( 0x3E00000000000000 ), - UINT64_C( 0x3F00000000000000 ), - UINT64_C( 0x3F80000000000000 ), - UINT64_C( 0x3FC0000000000000 ) -}; - -static float64_t f64RandomQInfP3( void ) -{ - int weightMaskNum; - union ui64_f64 uZ; - - weightMaskNum = randomN_ui8( f64NumQInfWeightMasks ); - uZ.ui = - (((uint_fast64_t) random_ui16()<<48 - & f64QInfWeightMasks[weightMaskNum]) - + f64QInfWeightOffsets[weightMaskNum]) - | ((f64P2[randomN_ui8( f64NumP2 )] + f64P2[randomN_ui8( f64NumP2 )]) - & UINT64_C( 0x000FFFFFFFFFFFFF )); - return uZ.f; - -} - -static float64_t f64RandomQInfPInf( void ) -{ - int weightMaskNum; - union ui64_f64 uZ; - - weightMaskNum = randomN_ui8( f64NumQInfWeightMasks ); - uZ.ui = - (random_ui64() - & (f64QInfWeightMasks[weightMaskNum] - | UINT64_C( 0x000FFFFFFFFFFFFF ))) - + f64QInfWeightOffsets[weightMaskNum]; - return uZ.f; - -} - -static float64_t f64Random( void ) -{ - - switch ( random_ui8() & 7 ) { - case 0: - case 1: - case 2: - return f64RandomQOutP3(); - case 3: - return f64RandomQOutPInf(); - case 4: - case 5: - case 6: - return f64RandomQInfP3(); - case 7: - return f64RandomQInfPInf(); - } - -} - -static struct sequence sequenceA, sequenceB, sequenceC; -static float64_t currentA, currentB, currentC; -static int subcase; - -float64_t genCases_f64_a, genCases_f64_b, genCases_f64_c; - -void genCases_f64_a_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = - (genCases_level == 1) ? 3 * f64NumQOutP1 : 2 * f64NumQOutP2; - genCases_done = false; - -} - -void genCases_f64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - case 1: - genCases_f64_a = f64Random(); - break; - case 2: - genCases_f64_a = f64NextQOutP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - break; - case 1: - genCases_f64_a = f64NextQOutP2( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f64_ab_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 6 * f64NumQInP1 * f64NumQInP1; - currentA = f64NextQInP1( &sequenceA ); - } else { - genCases_total = 2 * f64NumQInP2 * f64NumQInP2; - currentA = f64NextQInP2( &sequenceA ); - } - genCases_done = false; - -} - -void genCases_f64_ab_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP1( &sequenceA ); - } - currentB = f64NextQInP1( &sequenceB ); - case 2: - case 4: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - break; - case 1: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - break; - case 3: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - break; - case 5: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - break; - case 1: - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP2( &sequenceA ); - } - genCases_f64_a = currentA; - genCases_f64_b = f64NextQInP2( &sequenceB ); - genCases_done = sequenceA.done & sequenceB.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -void genCases_f64_abc_init( void ) -{ - - sequenceA.expNum = 0; - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - sequenceB.expNum = 0; - sequenceB.term1Num = 0; - sequenceB.term2Num = 0; - sequenceB.done = false; - sequenceC.expNum = 0; - sequenceC.term1Num = 0; - sequenceC.term2Num = 0; - sequenceC.done = false; - subcase = 0; - if ( genCases_level == 1 ) { - genCases_total = 9 * f64NumQInP1 * f64NumQInP1 * f64NumQInP1; - currentA = f64NextQInP1( &sequenceA ); - currentB = f64NextQInP1( &sequenceB ); - } else { - genCases_total = 2 * f64NumQInP2 * f64NumQInP2 * f64NumQInP2; - currentA = f64NextQInP2( &sequenceA ); - currentB = f64NextQInP2( &sequenceB ); - } - genCases_done = false; - -} - -void genCases_f64_abc_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP1( &sequenceA ); - } - currentB = f64NextQInP1( &sequenceB ); - } - currentC = f64NextQInP1( &sequenceC ); - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = currentC; - break; - case 1: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = f64Random(); - break; - case 2: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 3: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - genCases_f64_c = currentC; - break; - case 4: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 5: - genCases_f64_a = f64Random(); - genCases_f64_b = currentB; - genCases_f64_c = f64Random(); - break; - case 6: - genCases_f64_a = currentA; - genCases_f64_b = f64Random(); - genCases_f64_c = currentC; - break; - case 7: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 8: - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = currentC; - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_f64_a = f64Random(); - genCases_f64_b = f64Random(); - genCases_f64_c = f64Random(); - break; - case 1: - if ( sequenceC.done ) { - sequenceC.done = false; - if ( sequenceB.done ) { - sequenceB.done = false; - currentA = f64NextQInP2( &sequenceA ); - } - currentB = f64NextQInP2( &sequenceB ); - } - genCases_f64_a = currentA; - genCases_f64_b = currentB; - genCases_f64_c = f64NextQInP2( &sequenceC ); - genCases_done = sequenceA.done & sequenceB.done & sequenceC.done; - subcase = -1; - break; - } - } - ++subcase; - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genCases_i32.c b/addins/TestFloat-3e/source/genCases_i32.c deleted file mode 100644 index 6a2fcad68..000000000 --- a/addins/TestFloat-3e/source/genCases_i32.c +++ /dev/null @@ -1,362 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -union ui32_i32 { uint32_t ui; int32_t i; }; - -enum { i32NumP1 = 124 }; -static const uint32_t i32P1[i32NumP1] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00800000, - 0x01000000, - 0x02000000, - 0x04000000, - 0x08000000, - 0x10000000, - 0x20000000, - 0x40000000, - 0x80000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8, - 0xFFFFFFFC, - 0xFFFFFFFE, - 0xFFFFFFFF, - 0xFFFFFFFD, - 0xFFFFFFFB, - 0xFFFFFFF7, - 0xFFFFFFEF, - 0xFFFFFFDF, - 0xFFFFFFBF, - 0xFFFFFF7F, - 0xFFFFFEFF, - 0xFFFFFDFF, - 0xFFFFFBFF, - 0xFFFFF7FF, - 0xFFFFEFFF, - 0xFFFFDFFF, - 0xFFFFBFFF, - 0xFFFF7FFF, - 0xFFFEFFFF, - 0xFFFDFFFF, - 0xFFFBFFFF, - 0xFFF7FFFF, - 0xFFEFFFFF, - 0xFFDFFFFF, - 0xFFBFFFFF, - 0xFF7FFFFF, - 0xFEFFFFFF, - 0xFDFFFFFF, - 0xFBFFFFFF, - 0xF7FFFFFF, - 0xEFFFFFFF, - 0xDFFFFFFF, - 0xBFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static int32_t i32NextP1( struct sequence *sequencePtr ) -{ - int termNum; - union ui32_i32 uZ; - - termNum = sequencePtr->term1Num; - uZ.ui = i32P1[termNum]; - ++termNum; - if ( i32NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return uZ.i; - -} - -static const int_fast32_t i32NumP2 = (i32NumP1 * i32NumP1 + i32NumP1) / 2; - -static int32_t i32NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - union ui32_i32 uZ; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - uZ.ui = i32P1[term1Num] + i32P1[term2Num]; - ++term2Num; - if ( i32NumP1 <= term2Num ) { - ++term1Num; - if ( i32NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return uZ.i; - -} - -static int32_t i32RandomP3( void ) -{ - union ui32_i32 uZ; - - uZ.ui = - i32P1[randomN_ui8( i32NumP1 )] + i32P1[randomN_ui8( i32NumP1 )] - + i32P1[randomN_ui8( i32NumP1 )]; - return uZ.i; - -} - -enum { i32NumPInfWeightMasks = 29 }; -static const uint32_t i32PInfWeightMasks[i32NumPInfWeightMasks] = { - 0xFFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F -}; -static const uint32_t i32PInfWeightOffsets[i32NumPInfWeightMasks] = { - 0x00000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8 -}; - -static int32_t i32RandomPInf( void ) -{ - int weightMaskNum; - union ui32_i32 uZ; - - weightMaskNum = randomN_ui8( i32NumPInfWeightMasks ); - uZ.ui = - (random_ui32() & i32PInfWeightMasks[weightMaskNum]) - + i32PInfWeightOffsets[weightMaskNum]; - return uZ.i; - -} - -static struct sequence sequenceA; -static int subcase; - -int32_t genCases_i32_a; - -void genCases_i32_a_init( void ) -{ - - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * i32NumP1 : 2 * i32NumP2; - genCases_done = false; - -} - -void genCases_i32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_i32_a = i32RandomP3(); - break; - case 1: - genCases_i32_a = i32RandomPInf(); - break; - case 2: - genCases_i32_a = i32NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_i32_a = i32RandomP3(); - break; - case 2: - genCases_i32_a = i32RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_i32_a = i32NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_i64.c b/addins/TestFloat-3e/source/genCases_i64.c deleted file mode 100644 index 82ff7236e..000000000 --- a/addins/TestFloat-3e/source/genCases_i64.c +++ /dev/null @@ -1,554 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -union ui64_i64 { uint64_t ui; int64_t i; }; - -enum { i64NumP1 = 252 }; -static const uint64_t i64P1[i64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x8000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ), - UINT64_C( 0xFFFFFFFFFFFFFFFC ), - UINT64_C( 0xFFFFFFFFFFFFFFFE ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFD ), - UINT64_C( 0xFFFFFFFFFFFFFFFB ), - UINT64_C( 0xFFFFFFFFFFFFFFF7 ), - UINT64_C( 0xFFFFFFFFFFFFFFEF ), - UINT64_C( 0xFFFFFFFFFFFFFFDF ), - UINT64_C( 0xFFFFFFFFFFFFFFBF ), - UINT64_C( 0xFFFFFFFFFFFFFF7F ), - UINT64_C( 0xFFFFFFFFFFFFFEFF ), - UINT64_C( 0xFFFFFFFFFFFFFDFF ), - UINT64_C( 0xFFFFFFFFFFFFFBFF ), - UINT64_C( 0xFFFFFFFFFFFFF7FF ), - UINT64_C( 0xFFFFFFFFFFFFEFFF ), - UINT64_C( 0xFFFFFFFFFFFFDFFF ), - UINT64_C( 0xFFFFFFFFFFFFBFFF ), - UINT64_C( 0xFFFFFFFFFFFF7FFF ), - UINT64_C( 0xFFFFFFFFFFFEFFFF ), - UINT64_C( 0xFFFFFFFFFFFDFFFF ), - UINT64_C( 0xFFFFFFFFFFFBFFFF ), - UINT64_C( 0xFFFFFFFFFFF7FFFF ), - UINT64_C( 0xFFFFFFFFFFEFFFFF ), - UINT64_C( 0xFFFFFFFFFFDFFFFF ), - UINT64_C( 0xFFFFFFFFFFBFFFFF ), - UINT64_C( 0xFFFFFFFFFF7FFFFF ), - UINT64_C( 0xFFFFFFFFFEFFFFFF ), - UINT64_C( 0xFFFFFFFFFDFFFFFF ), - UINT64_C( 0xFFFFFFFFFBFFFFFF ), - UINT64_C( 0xFFFFFFFFF7FFFFFF ), - UINT64_C( 0xFFFFFFFFEFFFFFFF ), - UINT64_C( 0xFFFFFFFFDFFFFFFF ), - UINT64_C( 0xFFFFFFFFBFFFFFFF ), - UINT64_C( 0xFFFFFFFF7FFFFFFF ), - UINT64_C( 0xFFFFFFFEFFFFFFFF ), - UINT64_C( 0xFFFFFFFDFFFFFFFF ), - UINT64_C( 0xFFFFFFFBFFFFFFFF ), - UINT64_C( 0xFFFFFFF7FFFFFFFF ), - UINT64_C( 0xFFFFFFEFFFFFFFFF ), - UINT64_C( 0xFFFFFFDFFFFFFFFF ), - UINT64_C( 0xFFFFFFBFFFFFFFFF ), - UINT64_C( 0xFFFFFF7FFFFFFFFF ), - UINT64_C( 0xFFFFFEFFFFFFFFFF ), - UINT64_C( 0xFFFFFDFFFFFFFFFF ), - UINT64_C( 0xFFFFFBFFFFFFFFFF ), - UINT64_C( 0xFFFFF7FFFFFFFFFF ), - UINT64_C( 0xFFFFEFFFFFFFFFFF ), - UINT64_C( 0xFFFFDFFFFFFFFFFF ), - UINT64_C( 0xFFFFBFFFFFFFFFFF ), - UINT64_C( 0xFFFF7FFFFFFFFFFF ), - UINT64_C( 0xFFFEFFFFFFFFFFFF ), - UINT64_C( 0xFFFDFFFFFFFFFFFF ), - UINT64_C( 0xFFFBFFFFFFFFFFFF ), - UINT64_C( 0xFFF7FFFFFFFFFFFF ), - UINT64_C( 0xFFEFFFFFFFFFFFFF ), - UINT64_C( 0xFFDFFFFFFFFFFFFF ), - UINT64_C( 0xFFBFFFFFFFFFFFFF ), - UINT64_C( 0xFF7FFFFFFFFFFFFF ), - UINT64_C( 0xFEFFFFFFFFFFFFFF ), - UINT64_C( 0xFDFFFFFFFFFFFFFF ), - UINT64_C( 0xFBFFFFFFFFFFFFFF ), - UINT64_C( 0xF7FFFFFFFFFFFFFF ), - UINT64_C( 0xEFFFFFFFFFFFFFFF ), - UINT64_C( 0xDFFFFFFFFFFFFFFF ), - UINT64_C( 0xBFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static int64_t i64NextP1( struct sequence *sequencePtr ) -{ - int termNum; - union ui64_i64 uZ; - - termNum = sequencePtr->term1Num; - uZ.ui = i64P1[termNum]; - ++termNum; - if ( i64NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return uZ.i; - -} - -static const int_fast64_t i64NumP2 = (i64NumP1 * i64NumP1 + i64NumP1) / 2; - -static int64_t i64NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - union ui64_i64 uZ; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - uZ.ui = i64P1[term1Num] + i64P1[term2Num]; - ++term2Num; - if ( i64NumP1 <= term2Num ) { - ++term1Num; - if ( i64NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return uZ.i; - -} - -static int64_t i64RandomP3( void ) -{ - union ui64_i64 uZ; - - uZ.ui = - i64P1[randomN_ui8( i64NumP1 )] + i64P1[randomN_ui8( i64NumP1 )] - + i64P1[randomN_ui8( i64NumP1 )]; - return uZ.i; - -} - -enum { i64NumPInfWeightMasks = 61 }; -static const uint64_t i64PInfWeightMasks[i64NumPInfWeightMasks] = { - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ) -}; -static const uint64_t i64PInfWeightOffsets[i64NumPInfWeightMasks] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ) -}; - -static int64_t i64RandomPInf( void ) -{ - int weightMaskNum; - union ui64_i64 uZ; - - weightMaskNum = randomN_ui8( i64NumPInfWeightMasks ); - uZ.ui = - (random_ui64() & i64PInfWeightMasks[weightMaskNum]) - + i64PInfWeightOffsets[weightMaskNum]; - return uZ.i; - -} - -static struct sequence sequenceA; -static int subcase; - -int64_t genCases_i64_a; - -void genCases_i64_a_init( void ) -{ - - sequenceA.term2Num = 0; - sequenceA.term1Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * i64NumP1 : 2 * i64NumP2; - genCases_done = false; - -} - -void genCases_i64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_i64_a = i64RandomP3(); - break; - case 1: - genCases_i64_a = i64RandomPInf(); - break; - case 2: - genCases_i64_a = i64NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_i64_a = i64RandomP3(); - break; - case 2: - genCases_i64_a = i64RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_i64_a = i64NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_ui32.c b/addins/TestFloat-3e/source/genCases_ui32.c deleted file mode 100644 index 1298ff6a1..000000000 --- a/addins/TestFloat-3e/source/genCases_ui32.c +++ /dev/null @@ -1,323 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -enum { ui32NumP1 = 124 }; -static const uint32_t ui32P1[ui32NumP1] = { - 0x00000000, - 0x00000001, - 0x00000002, - 0x00000004, - 0x00000008, - 0x00000010, - 0x00000020, - 0x00000040, - 0x00000080, - 0x00000100, - 0x00000200, - 0x00000400, - 0x00000800, - 0x00001000, - 0x00002000, - 0x00004000, - 0x00008000, - 0x00010000, - 0x00020000, - 0x00040000, - 0x00080000, - 0x00100000, - 0x00200000, - 0x00400000, - 0x00800000, - 0x01000000, - 0x02000000, - 0x04000000, - 0x08000000, - 0x10000000, - 0x20000000, - 0x40000000, - 0x80000000, - 0xC0000000, - 0xE0000000, - 0xF0000000, - 0xF8000000, - 0xFC000000, - 0xFE000000, - 0xFF000000, - 0xFF800000, - 0xFFC00000, - 0xFFE00000, - 0xFFF00000, - 0xFFF80000, - 0xFFFC0000, - 0xFFFE0000, - 0xFFFF0000, - 0xFFFF8000, - 0xFFFFC000, - 0xFFFFE000, - 0xFFFFF000, - 0xFFFFF800, - 0xFFFFFC00, - 0xFFFFFE00, - 0xFFFFFF00, - 0xFFFFFF80, - 0xFFFFFFC0, - 0xFFFFFFE0, - 0xFFFFFFF0, - 0xFFFFFFF8, - 0xFFFFFFFC, - 0xFFFFFFFE, - 0xFFFFFFFF, - 0xFFFFFFFD, - 0xFFFFFFFB, - 0xFFFFFFF7, - 0xFFFFFFEF, - 0xFFFFFFDF, - 0xFFFFFFBF, - 0xFFFFFF7F, - 0xFFFFFEFF, - 0xFFFFFDFF, - 0xFFFFFBFF, - 0xFFFFF7FF, - 0xFFFFEFFF, - 0xFFFFDFFF, - 0xFFFFBFFF, - 0xFFFF7FFF, - 0xFFFEFFFF, - 0xFFFDFFFF, - 0xFFFBFFFF, - 0xFFF7FFFF, - 0xFFEFFFFF, - 0xFFDFFFFF, - 0xFFBFFFFF, - 0xFF7FFFFF, - 0xFEFFFFFF, - 0xFDFFFFFF, - 0xFBFFFFFF, - 0xF7FFFFFF, - 0xEFFFFFFF, - 0xDFFFFFFF, - 0xBFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F, - 0x00000007, - 0x00000003 -}; - -static uint32_t ui32NextP1( struct sequence *sequencePtr ) -{ - int termNum; - uint32_t z; - - termNum = sequencePtr->term1Num; - z = ui32P1[termNum]; - ++termNum; - if ( ui32NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return z; - -} - -static const uint_fast32_t ui32NumP2 = (ui32NumP1 * ui32NumP1 + ui32NumP1) / 2; - -static uint32_t ui32NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - uint32_t z; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - z = ui32P1[term1Num] + ui32P1[term2Num]; - ++term2Num; - if ( ui32NumP1 <= term2Num ) { - ++term1Num; - if ( ui32NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return z; - -} - -static uint32_t ui32RandomP3( void ) -{ - - return - ui32P1[randomN_ui8( ui32NumP1 )] + ui32P1[randomN_ui8( ui32NumP1 )] - + ui32P1[randomN_ui8( ui32NumP1 )]; - -} - -enum { ui32NumPInfWeightMasks = 29 }; -static const uint32_t ui32PInfWeightMasks[ui32NumPInfWeightMasks] = { - 0xFFFFFFFF, - 0x7FFFFFFF, - 0x3FFFFFFF, - 0x1FFFFFFF, - 0x0FFFFFFF, - 0x07FFFFFF, - 0x03FFFFFF, - 0x01FFFFFF, - 0x00FFFFFF, - 0x007FFFFF, - 0x003FFFFF, - 0x001FFFFF, - 0x000FFFFF, - 0x0007FFFF, - 0x0003FFFF, - 0x0001FFFF, - 0x0000FFFF, - 0x00007FFF, - 0x00003FFF, - 0x00001FFF, - 0x00000FFF, - 0x000007FF, - 0x000003FF, - 0x000001FF, - 0x000000FF, - 0x0000007F, - 0x0000003F, - 0x0000001F, - 0x0000000F -}; - -static uint32_t ui32RandomPInf( void ) -{ - int weightMaskNum; - - weightMaskNum = randomN_ui8( ui32NumPInfWeightMasks ); - return random_ui32() & ui32PInfWeightMasks[weightMaskNum]; - -} - -static struct sequence sequenceA; -static int subcase; - -uint32_t genCases_ui32_a; - -void genCases_ui32_a_init( void ) -{ - - sequenceA.term1Num = 0; - sequenceA.term2Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * ui32NumP1 : 2 * ui32NumP2; - genCases_done = false; - -} - -void genCases_ui32_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_ui32_a = ui32RandomP3(); - break; - case 1: - genCases_ui32_a = ui32RandomPInf(); - break; - case 2: - genCases_ui32_a = ui32NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_ui32_a = ui32RandomP3(); - break; - case 2: - genCases_ui32_a = ui32RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_ui32_a = ui32NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_ui64.c b/addins/TestFloat-3e/source/genCases_ui64.c deleted file mode 100644 index 42d44a467..000000000 --- a/addins/TestFloat-3e/source/genCases_ui64.c +++ /dev/null @@ -1,483 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" -#include "genCases.h" - -struct sequence { - int term1Num, term2Num; - bool done; -}; - -enum { ui64NumP1 = 252 }; -static const uint64_t ui64P1[ui64NumP1] = { - UINT64_C( 0x0000000000000000 ), - UINT64_C( 0x0000000000000001 ), - UINT64_C( 0x0000000000000002 ), - UINT64_C( 0x0000000000000004 ), - UINT64_C( 0x0000000000000008 ), - UINT64_C( 0x0000000000000010 ), - UINT64_C( 0x0000000000000020 ), - UINT64_C( 0x0000000000000040 ), - UINT64_C( 0x0000000000000080 ), - UINT64_C( 0x0000000000000100 ), - UINT64_C( 0x0000000000000200 ), - UINT64_C( 0x0000000000000400 ), - UINT64_C( 0x0000000000000800 ), - UINT64_C( 0x0000000000001000 ), - UINT64_C( 0x0000000000002000 ), - UINT64_C( 0x0000000000004000 ), - UINT64_C( 0x0000000000008000 ), - UINT64_C( 0x0000000000010000 ), - UINT64_C( 0x0000000000020000 ), - UINT64_C( 0x0000000000040000 ), - UINT64_C( 0x0000000000080000 ), - UINT64_C( 0x0000000000100000 ), - UINT64_C( 0x0000000000200000 ), - UINT64_C( 0x0000000000400000 ), - UINT64_C( 0x0000000000800000 ), - UINT64_C( 0x0000000001000000 ), - UINT64_C( 0x0000000002000000 ), - UINT64_C( 0x0000000004000000 ), - UINT64_C( 0x0000000008000000 ), - UINT64_C( 0x0000000010000000 ), - UINT64_C( 0x0000000020000000 ), - UINT64_C( 0x0000000040000000 ), - UINT64_C( 0x0000000080000000 ), - UINT64_C( 0x0000000100000000 ), - UINT64_C( 0x0000000200000000 ), - UINT64_C( 0x0000000400000000 ), - UINT64_C( 0x0000000800000000 ), - UINT64_C( 0x0000001000000000 ), - UINT64_C( 0x0000002000000000 ), - UINT64_C( 0x0000004000000000 ), - UINT64_C( 0x0000008000000000 ), - UINT64_C( 0x0000010000000000 ), - UINT64_C( 0x0000020000000000 ), - UINT64_C( 0x0000040000000000 ), - UINT64_C( 0x0000080000000000 ), - UINT64_C( 0x0000100000000000 ), - UINT64_C( 0x0000200000000000 ), - UINT64_C( 0x0000400000000000 ), - UINT64_C( 0x0000800000000000 ), - UINT64_C( 0x0001000000000000 ), - UINT64_C( 0x0002000000000000 ), - UINT64_C( 0x0004000000000000 ), - UINT64_C( 0x0008000000000000 ), - UINT64_C( 0x0010000000000000 ), - UINT64_C( 0x0020000000000000 ), - UINT64_C( 0x0040000000000000 ), - UINT64_C( 0x0080000000000000 ), - UINT64_C( 0x0100000000000000 ), - UINT64_C( 0x0200000000000000 ), - UINT64_C( 0x0400000000000000 ), - UINT64_C( 0x0800000000000000 ), - UINT64_C( 0x1000000000000000 ), - UINT64_C( 0x2000000000000000 ), - UINT64_C( 0x4000000000000000 ), - UINT64_C( 0x8000000000000000 ), - UINT64_C( 0xC000000000000000 ), - UINT64_C( 0xE000000000000000 ), - UINT64_C( 0xF000000000000000 ), - UINT64_C( 0xF800000000000000 ), - UINT64_C( 0xFC00000000000000 ), - UINT64_C( 0xFE00000000000000 ), - UINT64_C( 0xFF00000000000000 ), - UINT64_C( 0xFF80000000000000 ), - UINT64_C( 0xFFC0000000000000 ), - UINT64_C( 0xFFE0000000000000 ), - UINT64_C( 0xFFF0000000000000 ), - UINT64_C( 0xFFF8000000000000 ), - UINT64_C( 0xFFFC000000000000 ), - UINT64_C( 0xFFFE000000000000 ), - UINT64_C( 0xFFFF000000000000 ), - UINT64_C( 0xFFFF800000000000 ), - UINT64_C( 0xFFFFC00000000000 ), - UINT64_C( 0xFFFFE00000000000 ), - UINT64_C( 0xFFFFF00000000000 ), - UINT64_C( 0xFFFFF80000000000 ), - UINT64_C( 0xFFFFFC0000000000 ), - UINT64_C( 0xFFFFFE0000000000 ), - UINT64_C( 0xFFFFFF0000000000 ), - UINT64_C( 0xFFFFFF8000000000 ), - UINT64_C( 0xFFFFFFC000000000 ), - UINT64_C( 0xFFFFFFE000000000 ), - UINT64_C( 0xFFFFFFF000000000 ), - UINT64_C( 0xFFFFFFF800000000 ), - UINT64_C( 0xFFFFFFFC00000000 ), - UINT64_C( 0xFFFFFFFE00000000 ), - UINT64_C( 0xFFFFFFFF00000000 ), - UINT64_C( 0xFFFFFFFF80000000 ), - UINT64_C( 0xFFFFFFFFC0000000 ), - UINT64_C( 0xFFFFFFFFE0000000 ), - UINT64_C( 0xFFFFFFFFF0000000 ), - UINT64_C( 0xFFFFFFFFF8000000 ), - UINT64_C( 0xFFFFFFFFFC000000 ), - UINT64_C( 0xFFFFFFFFFE000000 ), - UINT64_C( 0xFFFFFFFFFF000000 ), - UINT64_C( 0xFFFFFFFFFF800000 ), - UINT64_C( 0xFFFFFFFFFFC00000 ), - UINT64_C( 0xFFFFFFFFFFE00000 ), - UINT64_C( 0xFFFFFFFFFFF00000 ), - UINT64_C( 0xFFFFFFFFFFF80000 ), - UINT64_C( 0xFFFFFFFFFFFC0000 ), - UINT64_C( 0xFFFFFFFFFFFE0000 ), - UINT64_C( 0xFFFFFFFFFFFF0000 ), - UINT64_C( 0xFFFFFFFFFFFF8000 ), - UINT64_C( 0xFFFFFFFFFFFFC000 ), - UINT64_C( 0xFFFFFFFFFFFFE000 ), - UINT64_C( 0xFFFFFFFFFFFFF000 ), - UINT64_C( 0xFFFFFFFFFFFFF800 ), - UINT64_C( 0xFFFFFFFFFFFFFC00 ), - UINT64_C( 0xFFFFFFFFFFFFFE00 ), - UINT64_C( 0xFFFFFFFFFFFFFF00 ), - UINT64_C( 0xFFFFFFFFFFFFFF80 ), - UINT64_C( 0xFFFFFFFFFFFFFFC0 ), - UINT64_C( 0xFFFFFFFFFFFFFFE0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF0 ), - UINT64_C( 0xFFFFFFFFFFFFFFF8 ), - UINT64_C( 0xFFFFFFFFFFFFFFFC ), - UINT64_C( 0xFFFFFFFFFFFFFFFE ), - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0xFFFFFFFFFFFFFFFD ), - UINT64_C( 0xFFFFFFFFFFFFFFFB ), - UINT64_C( 0xFFFFFFFFFFFFFFF7 ), - UINT64_C( 0xFFFFFFFFFFFFFFEF ), - UINT64_C( 0xFFFFFFFFFFFFFFDF ), - UINT64_C( 0xFFFFFFFFFFFFFFBF ), - UINT64_C( 0xFFFFFFFFFFFFFF7F ), - UINT64_C( 0xFFFFFFFFFFFFFEFF ), - UINT64_C( 0xFFFFFFFFFFFFFDFF ), - UINT64_C( 0xFFFFFFFFFFFFFBFF ), - UINT64_C( 0xFFFFFFFFFFFFF7FF ), - UINT64_C( 0xFFFFFFFFFFFFEFFF ), - UINT64_C( 0xFFFFFFFFFFFFDFFF ), - UINT64_C( 0xFFFFFFFFFFFFBFFF ), - UINT64_C( 0xFFFFFFFFFFFF7FFF ), - UINT64_C( 0xFFFFFFFFFFFEFFFF ), - UINT64_C( 0xFFFFFFFFFFFDFFFF ), - UINT64_C( 0xFFFFFFFFFFFBFFFF ), - UINT64_C( 0xFFFFFFFFFFF7FFFF ), - UINT64_C( 0xFFFFFFFFFFEFFFFF ), - UINT64_C( 0xFFFFFFFFFFDFFFFF ), - UINT64_C( 0xFFFFFFFFFFBFFFFF ), - UINT64_C( 0xFFFFFFFFFF7FFFFF ), - UINT64_C( 0xFFFFFFFFFEFFFFFF ), - UINT64_C( 0xFFFFFFFFFDFFFFFF ), - UINT64_C( 0xFFFFFFFFFBFFFFFF ), - UINT64_C( 0xFFFFFFFFF7FFFFFF ), - UINT64_C( 0xFFFFFFFFEFFFFFFF ), - UINT64_C( 0xFFFFFFFFDFFFFFFF ), - UINT64_C( 0xFFFFFFFFBFFFFFFF ), - UINT64_C( 0xFFFFFFFF7FFFFFFF ), - UINT64_C( 0xFFFFFFFEFFFFFFFF ), - UINT64_C( 0xFFFFFFFDFFFFFFFF ), - UINT64_C( 0xFFFFFFFBFFFFFFFF ), - UINT64_C( 0xFFFFFFF7FFFFFFFF ), - UINT64_C( 0xFFFFFFEFFFFFFFFF ), - UINT64_C( 0xFFFFFFDFFFFFFFFF ), - UINT64_C( 0xFFFFFFBFFFFFFFFF ), - UINT64_C( 0xFFFFFF7FFFFFFFFF ), - UINT64_C( 0xFFFFFEFFFFFFFFFF ), - UINT64_C( 0xFFFFFDFFFFFFFFFF ), - UINT64_C( 0xFFFFFBFFFFFFFFFF ), - UINT64_C( 0xFFFFF7FFFFFFFFFF ), - UINT64_C( 0xFFFFEFFFFFFFFFFF ), - UINT64_C( 0xFFFFDFFFFFFFFFFF ), - UINT64_C( 0xFFFFBFFFFFFFFFFF ), - UINT64_C( 0xFFFF7FFFFFFFFFFF ), - UINT64_C( 0xFFFEFFFFFFFFFFFF ), - UINT64_C( 0xFFFDFFFFFFFFFFFF ), - UINT64_C( 0xFFFBFFFFFFFFFFFF ), - UINT64_C( 0xFFF7FFFFFFFFFFFF ), - UINT64_C( 0xFFEFFFFFFFFFFFFF ), - UINT64_C( 0xFFDFFFFFFFFFFFFF ), - UINT64_C( 0xFFBFFFFFFFFFFFFF ), - UINT64_C( 0xFF7FFFFFFFFFFFFF ), - UINT64_C( 0xFEFFFFFFFFFFFFFF ), - UINT64_C( 0xFDFFFFFFFFFFFFFF ), - UINT64_C( 0xFBFFFFFFFFFFFFFF ), - UINT64_C( 0xF7FFFFFFFFFFFFFF ), - UINT64_C( 0xEFFFFFFFFFFFFFFF ), - UINT64_C( 0xDFFFFFFFFFFFFFFF ), - UINT64_C( 0xBFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ), - UINT64_C( 0x0000000000000007 ), - UINT64_C( 0x0000000000000003 ) -}; - -static uint64_t ui64NextP1( struct sequence *sequencePtr ) -{ - int termNum; - uint64_t z; - - termNum = sequencePtr->term1Num; - z = ui64P1[termNum]; - ++termNum; - if ( ui64NumP1 <= termNum ) { - termNum = 0; - sequencePtr->done = true; - } - sequencePtr->term1Num = termNum; - return z; - -} - -static const uint_fast64_t ui64NumP2 = (ui64NumP1 * ui64NumP1 + ui64NumP1) / 2; - -static uint64_t ui64NextP2( struct sequence *sequencePtr ) -{ - int term1Num, term2Num; - uint64_t z; - - term2Num = sequencePtr->term2Num; - term1Num = sequencePtr->term1Num; - z = ui64P1[term1Num] + ui64P1[term2Num]; - ++term2Num; - if ( ui64NumP1 <= term2Num ) { - ++term1Num; - if ( ui64NumP1 <= term1Num ) { - term1Num = 0; - sequencePtr->done = true; - } - term2Num = term1Num; - sequencePtr->term1Num = term1Num; - } - sequencePtr->term2Num = term2Num; - return z; - -} - -static uint64_t ui64RandomP3( void ) -{ - - return - ui64P1[randomN_ui8( ui64NumP1 )] + ui64P1[randomN_ui8( ui64NumP1 )] - + ui64P1[randomN_ui8( ui64NumP1 )]; - -} - -enum { ui64NumPInfWeightMasks = 61 }; -static const uint64_t ui64PInfWeightMasks[ui64NumPInfWeightMasks] = { - UINT64_C( 0xFFFFFFFFFFFFFFFF ), - UINT64_C( 0x7FFFFFFFFFFFFFFF ), - UINT64_C( 0x3FFFFFFFFFFFFFFF ), - UINT64_C( 0x1FFFFFFFFFFFFFFF ), - UINT64_C( 0x0FFFFFFFFFFFFFFF ), - UINT64_C( 0x07FFFFFFFFFFFFFF ), - UINT64_C( 0x03FFFFFFFFFFFFFF ), - UINT64_C( 0x01FFFFFFFFFFFFFF ), - UINT64_C( 0x00FFFFFFFFFFFFFF ), - UINT64_C( 0x007FFFFFFFFFFFFF ), - UINT64_C( 0x003FFFFFFFFFFFFF ), - UINT64_C( 0x001FFFFFFFFFFFFF ), - UINT64_C( 0x000FFFFFFFFFFFFF ), - UINT64_C( 0x0007FFFFFFFFFFFF ), - UINT64_C( 0x0003FFFFFFFFFFFF ), - UINT64_C( 0x0001FFFFFFFFFFFF ), - UINT64_C( 0x0000FFFFFFFFFFFF ), - UINT64_C( 0x00007FFFFFFFFFFF ), - UINT64_C( 0x00003FFFFFFFFFFF ), - UINT64_C( 0x00001FFFFFFFFFFF ), - UINT64_C( 0x00000FFFFFFFFFFF ), - UINT64_C( 0x000007FFFFFFFFFF ), - UINT64_C( 0x000003FFFFFFFFFF ), - UINT64_C( 0x000001FFFFFFFFFF ), - UINT64_C( 0x000000FFFFFFFFFF ), - UINT64_C( 0x0000007FFFFFFFFF ), - UINT64_C( 0x0000003FFFFFFFFF ), - UINT64_C( 0x0000001FFFFFFFFF ), - UINT64_C( 0x0000000FFFFFFFFF ), - UINT64_C( 0x00000007FFFFFFFF ), - UINT64_C( 0x00000003FFFFFFFF ), - UINT64_C( 0x00000001FFFFFFFF ), - UINT64_C( 0x00000000FFFFFFFF ), - UINT64_C( 0x000000007FFFFFFF ), - UINT64_C( 0x000000003FFFFFFF ), - UINT64_C( 0x000000001FFFFFFF ), - UINT64_C( 0x000000000FFFFFFF ), - UINT64_C( 0x0000000007FFFFFF ), - UINT64_C( 0x0000000003FFFFFF ), - UINT64_C( 0x0000000001FFFFFF ), - UINT64_C( 0x0000000000FFFFFF ), - UINT64_C( 0x00000000007FFFFF ), - UINT64_C( 0x00000000003FFFFF ), - UINT64_C( 0x00000000001FFFFF ), - UINT64_C( 0x00000000000FFFFF ), - UINT64_C( 0x000000000007FFFF ), - UINT64_C( 0x000000000003FFFF ), - UINT64_C( 0x000000000001FFFF ), - UINT64_C( 0x000000000000FFFF ), - UINT64_C( 0x0000000000007FFF ), - UINT64_C( 0x0000000000003FFF ), - UINT64_C( 0x0000000000001FFF ), - UINT64_C( 0x0000000000000FFF ), - UINT64_C( 0x00000000000007FF ), - UINT64_C( 0x00000000000003FF ), - UINT64_C( 0x00000000000001FF ), - UINT64_C( 0x00000000000000FF ), - UINT64_C( 0x000000000000007F ), - UINT64_C( 0x000000000000003F ), - UINT64_C( 0x000000000000001F ), - UINT64_C( 0x000000000000000F ) -}; - -static uint64_t ui64RandomPInf( void ) -{ - int weightMaskNum; - - weightMaskNum = randomN_ui8( ui64NumPInfWeightMasks ); - return random_ui64() & ui64PInfWeightMasks[weightMaskNum]; - -} - -static struct sequence sequenceA; -static int subcase; - -uint64_t genCases_ui64_a; - -void genCases_ui64_a_init( void ) -{ - - sequenceA.term2Num = 0; - sequenceA.term1Num = 0; - sequenceA.done = false; - subcase = 0; - genCases_total = (genCases_level == 1) ? 3 * ui64NumP1 : 2 * ui64NumP2; - genCases_done = false; - -} - -void genCases_ui64_a_next( void ) -{ - - if ( genCases_level == 1 ) { - switch ( subcase ) { - case 0: - genCases_ui64_a = ui64RandomP3(); - break; - case 1: - genCases_ui64_a = ui64RandomPInf(); - break; - case 2: - genCases_ui64_a = ui64NextP1( &sequenceA ); - genCases_done = sequenceA.done; - subcase = -1; - break; - } - } else { - switch ( subcase ) { - case 0: - genCases_ui64_a = ui64RandomP3(); - break; - case 2: - genCases_ui64_a = ui64RandomPInf(); - break; - case 3: - subcase = -1; - case 1: - genCases_ui64_a = ui64NextP2( &sequenceA ); - genCases_done = sequenceA.done; - break; - } - } - ++subcase; - -} - diff --git a/addins/TestFloat-3e/source/genCases_writeTestsTotal.c b/addins/TestFloat-3e/source/genCases_writeTestsTotal.c deleted file mode 100644 index 715a7cc2d..000000000 --- a/addins/TestFloat-3e/source/genCases_writeTestsTotal.c +++ /dev/null @@ -1,63 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "genCases.h" - -void genCases_writeTestsTotal( bool forever ) -{ - - if ( forever ) { - fputs( "Unbounded tests.\n", stderr ); - } else { - if ( 2000000000 <= genCases_total ) { - fprintf( - stderr, - "\r%lu%09lu tests total.\n", - (long unsigned) (genCases_total / 1000000000), - (long unsigned) (genCases_total % 1000000000) - ); - } else { - fprintf( - stderr, "\r%lu tests total.\n", (long unsigned) genCases_total - ); - } - } - -} - diff --git a/addins/TestFloat-3e/source/genLoops.c b/addins/TestFloat-3e/source/genLoops.c deleted file mode 100644 index 6082fc24e..000000000 --- a/addins/TestFloat-3e/source/genLoops.c +++ /dev/null @@ -1,2890 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include -#include "platform.h" -#include "uint128.h" -#include "fail.h" -#include "softfloat.h" -#include "genCases.h" -#include "writeHex.h" -#include "genLoops.h" - -volatile sig_atomic_t genLoops_stop = false; - -bool genLoops_forever; -bool genLoops_givenCount; -uint_fast64_t genLoops_count; -uint_fast8_t *genLoops_trueFlagsPtr; - -#ifdef FLOAT16 -union ui16_f16 { uint16_t ui; float16_t f; }; -#endif -union ui32_f32 { uint32_t ui; float32_t f; }; -#ifdef FLOAT64 -union ui64_f64 { uint64_t ui; float64_t f; }; -#endif - -static void checkEnoughCases( void ) -{ - - if ( genLoops_givenCount && (genLoops_count < genCases_total) ) { - if ( 2000000000 <= genCases_total ) { - fail( - "Too few cases; minimum is %lu%09lu", - (unsigned long) (genCases_total / 1000000000), - (unsigned long) (genCases_total % 1000000000) - ); - } else { - fail( - "Too few cases; minimum is %lu", (unsigned long) genCases_total - ); - } - } - -} - -static void writeGenOutput_flags( uint_fast8_t flags ) -{ - uint_fast8_t commonFlags; - - commonFlags = 0; - if ( flags & softfloat_flag_invalid ) commonFlags |= 0x10; - if ( flags & softfloat_flag_infinite ) commonFlags |= 0x08; - if ( flags & softfloat_flag_overflow ) commonFlags |= 0x04; - if ( flags & softfloat_flag_underflow ) commonFlags |= 0x02; - if ( flags & softfloat_flag_inexact ) commonFlags |= 0x01; - writeHex_ui8( commonFlags, '\n' ); - -} - -static bool writeGenOutputs_bool( bool z, uint_fast8_t flags ) -{ - - writeHex_bool( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#ifdef FLOAT16 - -static bool writeGenOutputs_ui16( uint_fast16_t z, uint_fast8_t flags ) -{ - - writeHex_ui16( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -static bool writeGenOutputs_ui32( uint_fast32_t z, uint_fast8_t flags ) -{ - - writeHex_ui32( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -static bool writeGenOutputs_ui64( uint_fast64_t z, uint_fast8_t flags ) -{ - - writeHex_ui64( z, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#ifdef EXTFLOAT80 - -static void writeHex_uiExtF80M( const extFloat80_t *aPtr, char sepChar ) -{ - const struct extFloat80M *aSPtr; - - aSPtr = (const struct extFloat80M *) aPtr; - writeHex_ui16( aSPtr->signExp, 0 ); - writeHex_ui64( aSPtr->signif, sepChar ); - -} - -static -bool writeGenOutputs_extF80M( const extFloat80_t *aPtr, uint_fast8_t flags ) -{ - - writeHex_uiExtF80M( aPtr, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -#ifdef FLOAT128 - -static void writeHex_uiF128M( const float128_t *aPtr, char sepChar ) -{ - const struct uint128 *uiAPtr; - - uiAPtr = (const struct uint128 *) aPtr; - writeHex_ui64( uiAPtr->v64, 0 ); - writeHex_ui64( uiAPtr->v0, sepChar ); - -} - -static bool writeGenOutputs_f128M( const float128_t *aPtr, uint_fast8_t flags ) -{ - - writeHex_uiF128M( aPtr, ' ' ); - writeGenOutput_flags( flags ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) return true; - } - return false; - -} - -#endif - -void gen_a_ui32( void ) -{ - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_ui64( void ) -{ - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_i32( void ) -{ - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_a_i64( void ) -{ - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#ifdef FLOAT16 - -void gen_a_f16( void ) -{ - union ui16_f16 uA; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f16( void ) -{ - union ui16_f16 u; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f16( void ) -{ - union ui16_f16 u; - - genCases_f16_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_abc_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_c; - writeHex_ui16( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -void gen_a_f32( void ) -{ - union ui32_f32 uA; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f32( void ) -{ - union ui32_f32 u; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f32( void ) -{ - union ui32_f32 u; - - genCases_f32_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_abc_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_c; - writeHex_ui32( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#ifdef FLOAT64 - -void gen_a_f64( void ) -{ - union ui64_f64 uA; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f64( void ) -{ - union ui64_f64 u; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f64( void ) -{ - union ui64_f64 u; - - genCases_f64_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_abc_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_c; - writeHex_ui64( u.ui, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_extF80( void ) -{ - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_extF80( void ) -{ - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_extF80( void ) -{ - - genCases_extF80_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_abc_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_c, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f128( void ) -{ - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_ab_f128( void ) -{ - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -void gen_abc_f128( void ) -{ - - genCases_f128_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_abc_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - writeHex_uiF128M( &genCases_f128_c, '\n' ); - if ( genLoops_givenCount ) { - --genLoops_count; - if ( ! genLoops_count ) break; - } - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_ui32_z_f16( float16_t trueFunction( uint32_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_ui32_z_f32( float32_t trueFunction( uint32_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_ui32_z_f64( float64_t trueFunction( uint32_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_ui32_z_extF80( void trueFunction( uint32_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_ui32_z_f128( void trueFunction( uint32_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui32_a_next(); - writeHex_ui32( genCases_ui32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_ui64_z_f16( float16_t trueFunction( uint64_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_ui64_z_f32( float32_t trueFunction( uint64_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_ui64_z_f64( float64_t trueFunction( uint64_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_ui64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_ui64_z_extF80( void trueFunction( uint64_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_ui64_z_f128( void trueFunction( uint64_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_ui64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_ui64_a_next(); - writeHex_ui64( genCases_ui64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_i32_z_f16( float16_t trueFunction( int32_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_i32_z_f32( float32_t trueFunction( int32_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_i32_z_f64( float64_t trueFunction( int32_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_i32_z_extF80( void trueFunction( int32_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_i32_z_f128( void trueFunction( int32_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_i32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i32_a_next(); - writeHex_ui32( genCases_i32_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void gen_a_i64_z_f16( float16_t trueFunction( int64_t ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_i64_z_f32( float32_t trueFunction( int64_t ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_i64_z_f64( float64_t trueFunction( int64_t ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_i64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_i64_z_extF80( void trueFunction( int64_t, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_i64_z_f128( void trueFunction( int64_t, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_i64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_i64_a_next(); - writeHex_ui64( genCases_i64_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT16 - -void - gen_a_f16_z_ui32_rx( - uint_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui64_rx( - uint_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i32_rx( - int_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i64_rx( - int_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui32_x( - uint_fast32_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_ui64_x( - uint_fast64_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i32_x( int_fast32_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f16_z_i64_x( int_fast64_t trueFunction( float16_t, bool ), bool exact ) -{ - union ui16_f16 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void gen_a_f16_z_f32( float32_t trueFunction( float16_t ) ) -{ - union ui16_f16 uA; - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_f16_z_f64( float64_t trueFunction( float16_t ) ) -{ - union ui16_f16 uA; - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_f16_z_extF80( void trueFunction( float16_t, extFloat80_t * ) ) -{ - union ui16_f16 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f16_z_f128( void trueFunction( float16_t, float128_t * ) ) -{ - union ui16_f16 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - uA.f = genCases_f16_a; - writeHex_ui16( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f16( float16_t trueFunction( float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f16_rx( - float16_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_a_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f16( float16_t trueFunction( float16_t, float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f16( float16_t trueFunction( float16_t, float16_t, float16_t ) ) -{ - union ui16_f16 u; - uint_fast8_t trueFlags; - - genCases_f16_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_abc_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_c; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f16_z_bool( bool trueFunction( float16_t, float16_t ) ) -{ - union ui16_f16 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f16_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f16_ab_next(); - u.f = genCases_f16_a; - writeHex_ui16( u.ui, ' ' ); - u.f = genCases_f16_b; - writeHex_ui16( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -void - gen_a_f32_z_ui32_rx( - uint_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui64_rx( - uint_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i32_rx( - int_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i64_rx( - int_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui32_x( - uint_fast32_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_ui64_x( - uint_fast64_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i32_x( int_fast32_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f32_z_i64_x( int_fast64_t trueFunction( float32_t, bool ), bool exact ) -{ - union ui32_f32 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f32_z_f16( float16_t trueFunction( float32_t ) ) -{ - union ui32_f32 uA; - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT64 - -void gen_a_f32_z_f64( float64_t trueFunction( float32_t ) ) -{ - union ui32_f32 uA; - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void gen_a_f32_z_extF80( void trueFunction( float32_t, extFloat80_t * ) ) -{ - union ui32_f32 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f32_z_f128( void trueFunction( float32_t, float128_t * ) ) -{ - union ui32_f32 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - uA.f = genCases_f32_a; - writeHex_ui32( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f32( float32_t trueFunction( float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f32_rx( - float32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_a_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f32( float32_t trueFunction( float32_t, float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f32( float32_t trueFunction( float32_t, float32_t, float32_t ) ) -{ - union ui32_f32 u; - uint_fast8_t trueFlags; - - genCases_f32_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_abc_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_c; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f32_z_bool( bool trueFunction( float32_t, float32_t ) ) -{ - union ui32_f32 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f32_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f32_ab_next(); - u.f = genCases_f32_a; - writeHex_ui32( u.ui, ' ' ); - u.f = genCases_f32_b; - writeHex_ui32( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void - gen_a_f64_z_ui32_rx( - uint_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui64_rx( - uint_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i32_rx( - int_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i64_rx( - int_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui32_x( - uint_fast32_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_ui64_x( - uint_fast64_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i32_x( int_fast32_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f64_z_i64_x( int_fast64_t trueFunction( float64_t, bool ), bool exact ) -{ - union ui64_f64 uA; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f64_z_f16( float16_t trueFunction( float64_t ) ) -{ - union ui64_f64 uA; - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_f64_z_f32( float32_t trueFunction( float64_t ) ) -{ - union ui64_f64 uA; - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef EXTFLOAT80 - -void gen_a_f64_z_extF80( void trueFunction( float64_t, extFloat80_t * ) ) -{ - union ui64_f64 uA; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void gen_a_f64_z_f128( void trueFunction( float64_t, float128_t * ) ) -{ - union ui64_f64 uA; - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - uA.f = genCases_f64_a; - writeHex_ui64( uA.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f64( float64_t trueFunction( float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void - gen_az_f64_rx( - float64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_a_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_abz_f64( float64_t trueFunction( float64_t, float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_abcz_f64( float64_t trueFunction( float64_t, float64_t, float64_t ) ) -{ - union ui64_f64 u; - uint_fast8_t trueFlags; - - genCases_f64_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_abc_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_c; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - u.f = trueFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( u.ui, trueFlags ) ) break; - } - -} - -void gen_ab_f64_z_bool( bool trueFunction( float64_t, float64_t ) ) -{ - union ui64_f64 u; - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f64_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f64_ab_next(); - u.f = genCases_f64_a; - writeHex_ui64( u.ui, ' ' ); - u.f = genCases_f64_b; - writeHex_ui64( u.ui, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void - gen_a_extF80_z_ui32_rx( - uint_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui64_rx( - uint_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i32_rx( - int_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i64_rx( - int_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui32_x( - uint_fast32_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_ui64_x( - uint_fast64_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i32_x( - int_fast32_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_extF80_z_i64_x( - int_fast64_t trueFunction( const extFloat80_t *, bool ), bool exact ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_extF80_z_f16( float16_t trueFunction( const extFloat80_t * ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_extF80_z_f32( float32_t trueFunction( const extFloat80_t * ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_extF80_z_f64( float64_t trueFunction( const extFloat80_t * ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_extF80_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void - gen_a_extF80_z_f128( void trueFunction( const extFloat80_t *, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_extF80( void trueFunction( const extFloat80_t *, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_az_extF80_rx( - void - trueFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_a_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, roundingMode, exact, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abz_extF80( - void - trueFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &genCases_extF80_b, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_ab_extF80_z_bool( - bool trueFunction( const extFloat80_t *, const extFloat80_t * ) ) -{ - bool trueZ; - uint_fast8_t trueFlags; - - genCases_extF80_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_extF80_ab_next(); - writeHex_uiExtF80M( &genCases_extF80_a, ' ' ); - writeHex_uiExtF80M( &genCases_extF80_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, &genCases_extF80_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - -#ifdef FLOAT128 - -void - gen_a_f128_z_ui32_rx( - uint_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui64_rx( - uint_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i32_rx( - int_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i64_rx( - int_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui32_x( - uint_fast32_t trueFunction( const float128_t *, bool ), bool exact ) -{ - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_ui64_x( - uint_fast64_t trueFunction( const float128_t *, bool ), bool exact ) -{ - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i32_x( - int_fast32_t trueFunction( const float128_t *, bool ), bool exact ) -{ - int_fast32_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( trueZ, trueFlags ) ) break; - } - -} - -void - gen_a_f128_z_i64_x( - int_fast64_t trueFunction( const float128_t *, bool ), bool exact ) -{ - int_fast64_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( trueZ, trueFlags ) ) break; - } - -} - -#ifdef FLOAT16 - -void gen_a_f128_z_f16( float16_t trueFunction( const float128_t * ) ) -{ - union ui16_f16 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui16( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -void gen_a_f128_z_f32( float32_t trueFunction( const float128_t * ) ) -{ - union ui32_f32 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui32( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#ifdef FLOAT64 - -void gen_a_f128_z_f64( float64_t trueFunction( const float128_t * ) ) -{ - union ui64_f64 uTrueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - uTrueZ.f = trueFunction( &genCases_f128_a ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_ui64( uTrueZ.ui, trueFlags ) ) break; - } - -} - -#endif - -#ifdef EXTFLOAT80 - -void - gen_a_f128_z_extF80( void trueFunction( const float128_t *, extFloat80_t * ) ) -{ - extFloat80_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_extF80M( &trueZ, trueFlags ) ) break; - } - -} - -#endif - -void gen_az_f128( void trueFunction( const float128_t *, float128_t * ) ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_az_f128_rx( - void trueFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_a_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_a_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, roundingMode, exact, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abz_f128( - void trueFunction( const float128_t *, const float128_t *, float128_t * ) - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &genCases_f128_b, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_abcz_f128( - void - trueFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ) -{ - float128_t trueZ; - uint_fast8_t trueFlags; - - genCases_f128_abc_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_abc_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - writeHex_uiF128M( &genCases_f128_c, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &trueZ ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_f128M( &trueZ, trueFlags ) ) break; - } - -} - -void - gen_ab_f128_z_bool( - bool trueFunction( const float128_t *, const float128_t * ) ) -{ - bool trueZ; - uint_fast8_t trueFlags; - - genCases_f128_ab_init(); - checkEnoughCases(); - while ( ! genLoops_stop && (! genCases_done || genLoops_forever) ) { - genCases_f128_ab_next(); - writeHex_uiF128M( &genCases_f128_a, ' ' ); - writeHex_uiF128M( &genCases_f128_b, ' ' ); - *genLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, &genCases_f128_b ); - trueFlags = *genLoops_trueFlagsPtr; - if ( writeGenOutputs_bool( trueZ, trueFlags ) ) break; - } - -} - -#endif - diff --git a/addins/TestFloat-3e/source/genLoops.h b/addins/TestFloat-3e/source/genLoops.h deleted file mode 100644 index f574b7757..000000000 --- a/addins/TestFloat-3e/source/genLoops.h +++ /dev/null @@ -1,354 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include "softfloat.h" - -extern volatile sig_atomic_t genLoops_stop; - -extern bool genLoops_forever; -extern bool genLoops_givenCount; -extern uint_fast64_t genLoops_count; -extern uint_fast8_t *genLoops_trueFlagsPtr; - -void gen_a_ui32( void ); -void gen_a_ui64( void ); -void gen_a_i32( void ); -void gen_a_i64( void ); -#ifdef FLOAT16 -void gen_a_f16( void ); -void gen_ab_f16( void ); -void gen_abc_f16( void ); -#endif -void gen_a_f32( void ); -void gen_ab_f32( void ); -void gen_abc_f32( void ); -#ifdef FLOAT64 -void gen_a_f64( void ); -void gen_ab_f64( void ); -void gen_abc_f64( void ); -#endif -#ifdef EXTFLOAT80 -void gen_a_extF80( void ); -void gen_ab_extF80( void ); -void gen_abc_extF80( void ); -#endif -#ifdef FLOAT128 -void gen_a_f128( void ); -void gen_ab_f128( void ); -void gen_abc_f128( void ); -#endif - -#ifdef FLOAT16 -void gen_a_ui32_z_f16( float16_t ( uint32_t ) ); -#endif -void gen_a_ui32_z_f32( float32_t ( uint32_t ) ); -#ifdef FLOAT64 -void gen_a_ui32_z_f64( float64_t ( uint32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_ui32_z_extF80( void ( uint32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_ui32_z_f128( void ( uint32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_ui64_z_f16( float16_t ( uint64_t ) ); -#endif -void gen_a_ui64_z_f32( float32_t ( uint64_t ) ); -#ifdef FLOAT64 -void gen_a_ui64_z_f64( float64_t ( uint64_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_ui64_z_extF80( void ( uint64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_ui64_z_f128( void ( uint64_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_i32_z_f16( float16_t ( int32_t ) ); -#endif -void gen_a_i32_z_f32( float32_t ( int32_t ) ); -#ifdef FLOAT64 -void gen_a_i32_z_f64( float64_t ( int32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_i32_z_extF80( void ( int32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_i32_z_f128( void ( int32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void gen_a_i64_z_f16( float16_t ( int64_t ) ); -#endif -void gen_a_i64_z_f32( float32_t ( int64_t ) ); -#ifdef FLOAT64 -void gen_a_i64_z_f64( float64_t ( int64_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_i64_z_extF80( void ( int64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_i64_z_f128( void ( int64_t, float128_t * ) ); -#endif - -#ifdef FLOAT16 -void - gen_a_f16_z_ui32_rx( - uint_fast32_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_ui64_rx( - uint_fast64_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_i32_rx( - int_fast32_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f16_z_i64_rx( - int_fast64_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f16_z_ui32_x( uint_fast32_t ( float16_t, bool ), bool ); -void gen_a_f16_z_ui64_x( uint_fast64_t ( float16_t, bool ), bool ); -void gen_a_f16_z_i32_x( int_fast32_t ( float16_t, bool ), bool ); -void gen_a_f16_z_i64_x( int_fast64_t ( float16_t, bool ), bool ); -void gen_a_f16_z_f32( float32_t ( float16_t ) ); -#ifdef FLOAT64 -void gen_a_f16_z_f64( float64_t ( float16_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f16_z_extF80( void ( float16_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f16_z_f128( void ( float16_t, float128_t * ) ); -#endif -void gen_az_f16( float16_t ( float16_t ) ); -void - gen_az_f16_rx( - float16_t ( float16_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f16( float16_t ( float16_t, float16_t ) ); -void gen_abcz_f16( float16_t ( float16_t, float16_t, float16_t ) ); -void gen_ab_f16_z_bool( bool ( float16_t, float16_t ) ); -#endif - -void - gen_a_f32_z_ui32_rx( - uint_fast32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_ui64_rx( - uint_fast64_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_i32_rx( - int_fast32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f32_z_i64_rx( - int_fast64_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f32_z_ui32_x( uint_fast32_t ( float32_t, bool ), bool ); -void gen_a_f32_z_ui64_x( uint_fast64_t ( float32_t, bool ), bool ); -void gen_a_f32_z_i32_x( int_fast32_t ( float32_t, bool ), bool ); -void gen_a_f32_z_i64_x( int_fast64_t ( float32_t, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f32_z_f16( float16_t ( float32_t ) ); -#endif -#ifdef FLOAT64 -void gen_a_f32_z_f64( float64_t ( float32_t ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f32_z_extF80( void ( float32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f32_z_f128( void ( float32_t, float128_t * ) ); -#endif -void gen_az_f32( float32_t ( float32_t ) ); -void - gen_az_f32_rx( - float32_t ( float32_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f32( float32_t ( float32_t, float32_t ) ); -void gen_abcz_f32( float32_t ( float32_t, float32_t, float32_t ) ); -void gen_ab_f32_z_bool( bool ( float32_t, float32_t ) ); - -#ifdef FLOAT64 -void - gen_a_f64_z_ui32_rx( - uint_fast32_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_ui64_rx( - uint_fast64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_i32_rx( - int_fast32_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void - gen_a_f64_z_i64_rx( - int_fast64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_a_f64_z_ui32_x( uint_fast32_t ( float64_t, bool ), bool ); -void gen_a_f64_z_ui64_x( uint_fast64_t ( float64_t, bool ), bool ); -void gen_a_f64_z_i32_x( int_fast32_t ( float64_t, bool ), bool ); -void gen_a_f64_z_i64_x( int_fast64_t ( float64_t, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f64_z_f16( float16_t ( float64_t ) ); -#endif -void gen_a_f64_z_f32( float32_t ( float64_t ) ); -#ifdef EXTFLOAT80 -void gen_a_f64_z_extF80( void ( float64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_f64_z_f128( void ( float64_t, float128_t * ) ); -#endif -void gen_az_f64( float64_t ( float64_t ) ); -void - gen_az_f64_rx( - float64_t ( float64_t, uint_fast8_t, bool ), uint_fast8_t, bool ); -void gen_abz_f64( float64_t ( float64_t, float64_t ) ); -void gen_abcz_f64( float64_t ( float64_t, float64_t, float64_t ) ); -void gen_ab_f64_z_bool( bool ( float64_t, float64_t ) ); -#endif - -#ifdef EXTFLOAT80 -void - gen_a_extF80_z_ui32_rx( - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_ui64_rx( - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_i32_rx( - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_i64_rx( - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_extF80_z_ui32_x( uint_fast32_t ( const extFloat80_t *, bool ), bool ); -void - gen_a_extF80_z_ui64_x( uint_fast64_t ( const extFloat80_t *, bool ), bool ); -void gen_a_extF80_z_i32_x( int_fast32_t ( const extFloat80_t *, bool ), bool ); -void gen_a_extF80_z_i64_x( int_fast64_t ( const extFloat80_t *, bool ), bool ); -#ifdef FLOAT16 -void gen_a_extF80_z_f16( float16_t ( const extFloat80_t * ) ); -#endif -void gen_a_extF80_z_f32( float32_t ( const extFloat80_t * ) ); -#ifdef FLOAT64 -void gen_a_extF80_z_f64( float64_t ( const extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void gen_a_extF80_z_f128( void ( const extFloat80_t *, float128_t * ) ); -#endif -void gen_az_extF80( void ( const extFloat80_t *, extFloat80_t * ) ); -void - gen_az_extF80_rx( - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t, - bool - ); -void - gen_abz_extF80( - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) ); -void - gen_ab_extF80_z_bool( bool ( const extFloat80_t *, const extFloat80_t * ) ); -#endif - -#ifdef FLOAT128 -void - gen_a_f128_z_ui32_rx( - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_ui64_rx( - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_i32_rx( - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - gen_a_f128_z_i64_rx( - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void gen_a_f128_z_ui32_x( uint_fast32_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_ui64_x( uint_fast64_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_i32_x( int_fast32_t ( const float128_t *, bool ), bool ); -void gen_a_f128_z_i64_x( int_fast64_t ( const float128_t *, bool ), bool ); -#ifdef FLOAT16 -void gen_a_f128_z_f16( float16_t ( const float128_t * ) ); -#endif -void gen_a_f128_z_f32( float32_t ( const float128_t * ) ); -#ifdef FLOAT64 -void gen_a_f128_z_f64( float64_t ( const float128_t * ) ); -#endif -#ifdef EXTFLOAT80 -void gen_a_f128_z_extF80( void ( const float128_t *, extFloat80_t * ) ); -#endif -void gen_az_f128( void ( const float128_t *, float128_t * ) ); -void - gen_az_f128_rx( - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t, - bool - ); -void - gen_abz_f128( void ( const float128_t *, const float128_t *, float128_t * ) ); -void - gen_abcz_f128( - void - ( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ); -void gen_ab_f128_z_bool( bool ( const float128_t *, const float128_t * ) ); -#endif - diff --git a/addins/TestFloat-3e/source/random.c b/addins/TestFloat-3e/source/random.c deleted file mode 100644 index da0613db2..000000000 --- a/addins/TestFloat-3e/source/random.c +++ /dev/null @@ -1,138 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "random.h" - -uint_fast8_t random_ui8( void ) -{ - - return rand()>>4 & 0xFF; - -} - -uint_fast16_t random_ui16( void ) -{ - - return (rand() & 0x0FF0)<<4 | (rand()>>4 & 0xFF); - -} - -uint_fast32_t random_ui32( void ) -{ - - return - (uint_fast32_t) (rand() & 0x0FF0)<<20 - | (uint_fast32_t) (rand() & 0x0FF0)<<12 - | (rand() & 0x0FF0)<<4 - | (rand()>>4 & 0xFF); - -} - -uint_fast64_t random_ui64( void ) -{ - - return (uint_fast64_t) random_ui32()<<32 | random_ui32(); - -} - -uint_fast8_t randomN_ui8( uint_fast8_t N ) -{ - uint_fast8_t scale, z; - - scale = 0; - while ( N < 0x80 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui8(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast16_t randomN_ui16( uint_fast16_t N ) -{ - uint_fast16_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui16(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast32_t randomN_ui32( uint_fast32_t N ) -{ - uint_fast32_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui32(); - } while ( N <= z ); - return z>>scale; - -} - -uint_fast64_t randomN_ui64( uint_fast64_t N ) -{ - uint_fast64_t scale, z; - - scale = 0; - while ( N < 0x8000 ) { - ++scale; - N <<= 1; - } - do { - z = random_ui64(); - } while ( N <= z ); - return z>>scale; - -} - diff --git a/addins/TestFloat-3e/source/random.h b/addins/TestFloat-3e/source/random.h deleted file mode 100644 index 92fe77975..000000000 --- a/addins/TestFloat-3e/source/random.h +++ /dev/null @@ -1,49 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include - -uint_fast8_t random_ui8( void ); -uint_fast16_t random_ui16( void ); -uint_fast32_t random_ui32( void ); -uint_fast64_t random_ui64( void ); - -uint_fast8_t randomN_ui8( uint_fast8_t ); -uint_fast16_t randomN_ui16( uint_fast16_t ); -uint_fast32_t randomN_ui32( uint_fast32_t ); -uint_fast64_t randomN_ui64( uint_fast64_t ); - diff --git a/addins/TestFloat-3e/source/readHex.c b/addins/TestFloat-3e/source/readHex.c deleted file mode 100644 index 31182b85c..000000000 --- a/addins/TestFloat-3e/source/readHex.c +++ /dev/null @@ -1,190 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include "platform.h" -#include "readHex.h" - -bool readHex_bool( bool *aPtr, char sepChar ) -{ - int i; - bool a; - - i = fgetc( stdin ); - if ( (i == EOF) || (i < '0') || ('1' < i) ) return false; - a = i - '0'; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui8( uint_least8_t *aPtr, char sepChar ) -{ - int i; - uint_fast8_t a; - - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a = i<<4; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= i; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui16( uint16_t *aPtr, char sepChar ) -{ - int i; - uint_fast16_t a; - - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a = (uint_fast16_t) i<<12; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= (uint_fast16_t) i<<8; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= (uint_fast16_t) i<<4; - i = fgetc( stdin ); - if ( i == EOF ) return false; - if ( ('0' <= i) && (i <= '9') ) { - i -= '0'; - } else if ( ('A' <= i) && (i <= 'F') ) { - i -= 'A' - 10; - } else if ( ('a' <= i) && (i <= 'f') ) { - i -= 'a' - 10; - } else { - return false; - } - a |= i; - if ( sepChar ) { - i = fgetc( stdin ); - if ( (sepChar != '\n') || (i != '\r') ) { - if ( i != sepChar ) return false; - } - } - *aPtr = a; - return true; - -} - -bool readHex_ui32( uint32_t *aPtr, char sepChar ) -{ - uint16_t v16, v0; - - if ( ! readHex_ui16( &v16, 0 ) || ! readHex_ui16( &v0, sepChar ) ) { - return false; - } - *aPtr = (uint_fast32_t) v16<<16 | v0; - return true; - -} - -bool readHex_ui64( uint64_t *aPtr, char sepChar ) -{ - uint32_t v32, v0; - - if ( ! readHex_ui32( &v32, 0 ) || ! readHex_ui32( &v0, sepChar ) ) { - return false; - } - *aPtr = (uint_fast64_t) v32<<32 | v0; - return true; - -} - diff --git a/addins/TestFloat-3e/source/readHex.h b/addins/TestFloat-3e/source/readHex.h deleted file mode 100644 index 82662571c..000000000 --- a/addins/TestFloat-3e/source/readHex.h +++ /dev/null @@ -1,46 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include - -bool readHex_bool( bool *, char ); -bool readHex_ui8( uint_least8_t *, char ); -bool readHex_ui16( uint16_t *, char ); -bool readHex_ui32( uint32_t *, char ); -bool readHex_ui64( uint64_t *, char ); - diff --git a/addins/TestFloat-3e/source/slowfloat.c b/addins/TestFloat-3e/source/slowfloat.c deleted file mode 100644 index d5252613d..000000000 --- a/addins/TestFloat-3e/source/slowfloat.c +++ /dev/null @@ -1,3749 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "uint128.h" -#include "softfloat.h" -#include "slowfloat.h" - -uint_fast8_t slowfloat_roundingMode; -uint_fast8_t slowfloat_detectTininess; -uint_fast8_t slowfloat_exceptionFlags; -#ifdef EXTFLOAT80 -uint_fast8_t slow_extF80_roundingPrecision; -#endif - -#ifdef FLOAT16 -union ui16_f16 { uint16_t ui; float16_t f; }; -#endif -union ui32_f32 { uint32_t ui; float32_t f; }; -#ifdef FLOAT64 -union ui64_f64 { uint64_t ui; float64_t f; }; -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -struct floatX { - bool isNaN; - bool isInf; - bool isZero; - bool sign; - int_fast32_t exp; - struct uint128 sig; -}; - -static const struct floatX floatXNaN = - { true, false, false, false, 0, { 0, 0 } }; -static const struct floatX floatXPositiveZero = - { false, false, true, false, 0, { 0, 0 } }; -static const struct floatX floatXNegativeZero = - { false, false, true, true, 0, { 0, 0 } }; - -static -void - roundFloatXTo11( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t roundBits, sigX64; - - sigX64 = xPtr->sig.v64; - roundBits = (sigX64 & UINT64_C( 0x1FFFFFFFFFFF )) | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFE00000000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < UINT64_C( 0x100000000000 ) ) goto noIncrement; - if ( - (roundBits == UINT64_C( 0x100000000000 )) - && !(sigX64 & UINT64_C( 0x200000000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < UINT64_C( 0x100000000000 ) ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= UINT64_C( 0x200000000000 ); - goto noIncrement; -#endif - } - sigX64 += UINT64_C( 0x200000000000 ); - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo24( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX64; - uint_fast32_t roundBits; - - sigX64 = xPtr->sig.v64; - roundBits = (uint32_t) sigX64 | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFFFFF00000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 0x80000000 ) goto noIncrement; - if ( - (roundBits == 0x80000000) - && !(sigX64 & UINT64_C( 0x100000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 0x80000000 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= UINT64_C( 0x100000000 ); - goto noIncrement; -#endif - } - sigX64 += UINT64_C( 0x100000000 ); - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo53( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX64; - uint_fast8_t roundBits; - - sigX64 = xPtr->sig.v64; - roundBits = (sigX64 & 7) | (xPtr->sig.v0 != 0); - if ( roundBits ) { - sigX64 &= UINT64_C( 0xFFFFFFFFFFFFFFF8 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 4 ) goto noIncrement; - if ( (roundBits == 4) && !(sigX64 & 8) ) goto noIncrement; - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 4 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX64 |= 8; - goto noIncrement; -#endif - } - sigX64 += 8; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - noIncrement: - xPtr->sig.v64 = sigX64; - xPtr->sig.v0 = 0; - } - -} - -static -void - roundFloatXTo64( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX0, roundBits, sigX64; - - sigX0 = xPtr->sig.v0; - roundBits = sigX0 & UINT64_C( 0x00FFFFFFFFFFFFFF ); - if ( roundBits ) { - sigX0 &= UINT64_C( 0xFF00000000000000 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < UINT64_C( 0x0080000000000000 ) ) goto noIncrement; - if ( - (roundBits == UINT64_C( 0x0080000000000000 )) - && !(sigX0 & UINT64_C( 0x0100000000000000 )) - ) { - goto noIncrement; - } - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < UINT64_C( 0x0080000000000000 ) ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX0 |= UINT64_C( 0x100000000000000 ); - goto noIncrement; -#endif - } - sigX0 += UINT64_C( 0x100000000000000 ); - sigX64 = xPtr->sig.v64 + !sigX0; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sigX64; - noIncrement: - xPtr->sig.v0 = sigX0; - } - -} - -static -void - roundFloatXTo113( - bool isTiny, struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast64_t sigX0; - uint_fast8_t roundBits; - uint_fast64_t sigX64; - - sigX0 = xPtr->sig.v0; - roundBits = sigX0 & 0x7F; - if ( roundBits ) { - sigX0 &= UINT64_C( 0xFFFFFFFFFFFFFF80 ); - if ( exact ) slowfloat_exceptionFlags |= softfloat_flag_inexact; - if ( isTiny ) slowfloat_exceptionFlags |= softfloat_flag_underflow; - switch ( roundingMode ) { - case softfloat_round_near_even: - if ( roundBits < 0x40 ) goto noIncrement; - if ( (roundBits == 0x40) && !(sigX0 & 0x80) ) goto noIncrement; - break; - case softfloat_round_minMag: - goto noIncrement; - case softfloat_round_min: - if ( !xPtr->sign ) goto noIncrement; - break; - case softfloat_round_max: - if ( xPtr->sign ) goto noIncrement; - break; - case softfloat_round_near_maxMag: - if ( roundBits < 0x40 ) goto noIncrement; - break; -#ifdef FLOAT_ROUND_ODD - case softfloat_round_odd: - sigX0 |= 0x80; - goto noIncrement; -#endif - } - sigX0 += 0x80; - sigX64 = xPtr->sig.v64 + !sigX0; - if ( sigX64 == UINT64_C( 0x0100000000000000 ) ) { - ++xPtr->exp; - sigX64 = UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sigX64; - noIncrement: - xPtr->sig.v0 = sigX0; - } - -} - -static void ui32ToFloatX( uint_fast32_t a, struct floatX *xPtr ) -{ - uint_fast64_t sig64; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->sign = false; - sig64 = a; - if ( a ) { - xPtr->isZero = false; - exp = 31; - sig64 <<= 24; - while ( sig64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig64 <<= 1; - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static -uint_fast32_t - floatXToUI32( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - uint_fast32_t z; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return (xPtr->isInf && xPtr->sign) ? 0 : 0xFFFFFFFF; - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 52 - x.exp; - if ( 56 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo53( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 3 ); - z = x.sig.v64; - if ( (shiftDist < 0) || x.sig.v64>>32 || (x.sign && z) ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? 0 : 0xFFFFFFFF; - } - return z; - -} - -static void ui64ToFloatX( uint_fast64_t a, struct floatX *xPtr ) -{ - struct uint128 sig; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->sign = false; - sig.v64 = 0; - sig.v0 = a; - if ( a ) { - xPtr->isZero = false; - exp = 63; - sig = shortShiftLeft128( sig, 56 ); - while ( sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig = sig; - -} - -static -uint_fast64_t - floatXToUI64( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - uint_fast64_t z; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return - (xPtr->isInf && xPtr->sign) ? 0 : UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 112 - x.exp; - if ( 116 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo113( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - z = x.sig.v0; - if ( (shiftDist < 0) || x.sig.v64 || (x.sign && z) ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? 0 : UINT64_C( 0xFFFFFFFFFFFFFFFF ); - } - return z; - -} - -static void i32ToFloatX( int_fast32_t a, struct floatX *xPtr ) -{ - bool sign; - uint_fast64_t sig64; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - sign = (a < 0); - xPtr->sign = sign; - sig64 = sign ? -(uint64_t) a : a; - if ( a ) { - xPtr->isZero = false; - exp = 31; - sig64 <<= 24; - while ( sig64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig64 <<= 1; - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static -int_fast32_t - floatXToI32( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - union { uint32_t ui; int32_t i; } uZ; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return (xPtr->isInf && xPtr->sign) ? -0x7FFFFFFF - 1 : 0x7FFFFFFF; - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 52 - x.exp; - if ( 56 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo53( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 3 ); - uZ.ui = x.sig.v64; - if ( x.sign ) uZ.ui = -uZ.ui; - if ( - (shiftDist < 0) || x.sig.v64>>32 - || ((uZ.i != 0) && (x.sign != (uZ.i < 0))) - ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return x.sign ? -0x7FFFFFFF - 1 : 0x7FFFFFFF; - } - return uZ.i; - -} - -static void i64ToFloatX( int_fast64_t a, struct floatX *xPtr ) -{ - bool sign; - struct uint128 sig; - int_fast32_t exp; - - xPtr->isNaN = false; - xPtr->isInf = false; - sign = (a < 0); - xPtr->sign = sign; - sig.v64 = 0; - sig.v0 = sign ? -(uint_fast64_t) a : a; - if ( a ) { - xPtr->isZero = false; - exp = 63; - sig = shortShiftLeft128( sig, 56 ); - while ( sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } - xPtr->exp = exp; - } else { - xPtr->isZero = true; - } - xPtr->sig = sig; - -} - -static -int_fast64_t - floatXToI64( - const struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - uint_fast8_t savedExceptionFlags; - struct floatX x; - int_fast32_t shiftDist; - union { uint64_t ui; int64_t i; } uZ; - - if ( xPtr->isInf || xPtr->isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - return - (xPtr->isInf && xPtr->sign) ? -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1 - : INT64_C( 0x7FFFFFFFFFFFFFFF ); - } - if ( xPtr->isZero ) return 0; - savedExceptionFlags = slowfloat_exceptionFlags; - x = *xPtr; - shiftDist = 112 - x.exp; - if ( 116 < shiftDist ) { - x.sig.v64 = 0; - x.sig.v0 = 1; - } else { - while ( 0 < shiftDist ) { - x.sig = shortShiftRightJam128( x.sig, 1 ); - --shiftDist; - } - } - roundFloatXTo113( false, &x, roundingMode, exact ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - uZ.ui = x.sig.v0; - if ( x.sign ) uZ.ui = -uZ.ui; - if ( - (shiftDist < 0) || x.sig.v64 || ((uZ.i != 0) && (x.sign != (uZ.i < 0))) - ) { - slowfloat_exceptionFlags = - savedExceptionFlags | softfloat_flag_invalid; - return - x.sign ? -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1 - : INT64_C( 0x7FFFFFFFFFFFFFFF ); - } - return uZ.i; - -} - -#ifdef FLOAT16 - -static void f16ToFloatX( float16_t a, struct floatX *xPtr ) -{ - union ui16_f16 uA; - uint_fast16_t uiA; - int_fast8_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & 0x8000) != 0); - exp = uiA>>10 & 0x1F; - sig64 = uiA & 0x03FF; - sig64 <<= 45; - if ( exp == 0x1F ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0xF; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0080000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0xF; - sig64 |= UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static float16_t floatXToF16( const struct floatX *xPtr ) -{ - uint_fast16_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui16_f16 uZ; - - if ( xPtr->isNaN ) { - uiZ = 0xFFFF; - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = xPtr->sign ? 0xFC00 : 0x7C00; - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? 0x8000 : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0xF <= 0); - roundFloatXTo11( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0xF; - if ( 0x1F <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = 0xFC00; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = 0xFBFF; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = 0x7C00; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = 0x7BFF; - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0xF; - if ( exp < -14 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo11( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast16_t) exp<<10; - if ( x.sign ) uiZ |= 0x8000; - uiZ |= x.sig.v64>>45 & 0x03FF; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - -static void f32ToFloatX( float32_t a, struct floatX *xPtr ) -{ - union ui32_f32 uA; - uint_fast32_t uiA; - int_fast16_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & 0x80000000) != 0); - exp = uiA>>23 & 0xFF; - sig64 = uiA & 0x007FFFFF; - sig64 <<= 32; - if ( exp == 0xFF ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x7F; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0080000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x7F; - sig64 |= UINT64_C( 0x0080000000000000 ); - } - xPtr->sig.v64 = sig64; - xPtr->sig.v0 = 0; - -} - -static float32_t floatXToF32( const struct floatX *xPtr ) -{ - uint_fast32_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui32_f32 uZ; - - if ( xPtr->isNaN ) { - uiZ = 0xFFFFFFFF; - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = xPtr->sign ? 0xFF800000 : 0x7F800000; - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? 0x80000000 : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x7F <= 0); - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x7F; - if ( 0xFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = 0xFF800000; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = 0xFF7FFFFF; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = 0x7F800000; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = 0x7F7FFFFF; - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x7F; - if ( exp < -27 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast32_t) exp<<23; - if ( x.sign ) uiZ |= 0x80000000; - uiZ |= x.sig.v64>>32 & 0x007FFFFF; - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#ifdef FLOAT64 - -static void f64ToFloatX( float64_t a, struct floatX *xPtr ) -{ - union ui64_f64 uA; - uint_fast64_t uiA; - int_fast16_t exp; - uint_fast64_t sig64; - - uA.f = a; - uiA = uA.ui; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = ((uiA & UINT64_C( 0x8000000000000000 )) != 0); - exp = uiA>>52 & 0x7FF; - sig64 = uiA & UINT64_C( 0x000FFFFFFFFFFFFF ); - if ( exp == 0x7FF ) { - if ( sig64 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig64 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x3FF; - do { - --exp; - sig64 <<= 1; - } while ( sig64 < UINT64_C( 0x0010000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x3FF; - sig64 |= UINT64_C( 0x0010000000000000 ); - } - xPtr->sig.v64 = sig64<<3; - xPtr->sig.v0 = 0; - -} - -static float64_t floatXToF64( const struct floatX *xPtr ) -{ - uint_fast64_t uiZ; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - union ui64_f64 uZ; - - if ( xPtr->isNaN ) { - uiZ = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - goto uiZ; - } - if ( xPtr->isInf ) { - uiZ = - xPtr->sign ? UINT64_C( 0xFFF0000000000000 ) - : UINT64_C( 0x7FF0000000000000 ); - goto uiZ; - } - if ( xPtr->isZero ) { - uiZ = xPtr->sign ? UINT64_C( 0x8000000000000000 ) : 0; - goto uiZ; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FF <= 0); - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x3FF; - if ( 0x7FF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZ = UINT64_C( 0xFFF0000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZ = UINT64_C( 0xFFEFFFFFFFFFFFFF ); - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZ = UINT64_C( 0x7FF0000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZ = UINT64_C( 0x7FEFFFFFFFFFFFFF ); - break; - } - } - goto uiZ; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FF; - if ( exp < -56 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ = (uint_fast64_t) exp<<52; - if ( x.sign ) uiZ |= UINT64_C( 0x8000000000000000 ); - uiZ |= x.sig.v64>>3 & UINT64_C( 0x000FFFFFFFFFFFFF ); - uiZ: - uZ.ui = uiZ; - return uZ.f; - -} - -#endif - -#ifdef EXTFLOAT80 - -static void extF80MToFloatX( const extFloat80_t *aPtr, struct floatX *xPtr ) -{ - const struct extFloat80M *aSPtr; - uint_fast16_t uiA64; - int_fast32_t exp; - struct uint128 sig; - - aSPtr = (const struct extFloat80M *) aPtr; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - uiA64 = aSPtr->signExp; - xPtr->sign = ((uiA64 & 0x8000) != 0); - exp = uiA64 & 0x7FFF; - sig.v64 = 0; - sig.v0 = aSPtr->signif; - if ( exp == 0x7FFF ) { - if ( sig.v0 & UINT64_C( 0x7FFFFFFFFFFFFFFF ) ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else { - if ( !exp ) ++exp; - exp -= 0x3FFF; - if ( !(sig.v0 & UINT64_C( 0x8000000000000000 )) ) { - if ( !sig.v0 ) { - xPtr->isZero = true; - } else { - do { - --exp; - sig.v0 <<= 1; - } while ( sig.v0 < UINT64_C( 0x8000000000000000 ) ); - } - } - xPtr->exp = exp; - } - xPtr->sig = shortShiftLeft128( sig, 56 ); - -} - -static void floatXToExtF80M( const struct floatX *xPtr, extFloat80_t *zPtr ) -{ - struct extFloat80M *zSPtr; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - uint_fast64_t uiZ0; - uint_fast16_t uiZ64; - - zSPtr = (struct extFloat80M *) zPtr; - if ( xPtr->isNaN ) { - zSPtr->signExp = 0xFFFF; - zSPtr->signif = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - return; - } - if ( xPtr->isInf ) { - zSPtr->signExp = xPtr->sign ? 0xFFFF : 0x7FFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - return; - } - if ( xPtr->isZero ) { - zSPtr->signExp = xPtr->sign ? 0x8000 : 0; - zSPtr->signif = 0; - return; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FFF <= 0); - switch ( slow_extF80_roundingPrecision ) { - case 32: - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - break; - case 64: - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - break; - default: - roundFloatXTo64( isTiny, &x, slowfloat_roundingMode, true ); - break; - } - exp = x.exp + 0x3FFF; - if ( 0x7FFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - zSPtr->signExp = 0xFFFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - switch ( slow_extF80_roundingPrecision ) { - case 32: - uiZ0 = UINT64_C( 0xFFFFFF0000000000 ); - break; - case 64: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFF800 ); - break; - default: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - zSPtr->signExp = 0xFFFE; - zSPtr->signif = uiZ0; - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - zSPtr->signExp = 0x7FFF; - zSPtr->signif = UINT64_C( 0x8000000000000000 ); - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - switch ( slow_extF80_roundingPrecision ) { - case 32: - uiZ0 = UINT64_C( 0xFFFFFF0000000000 ); - break; - case 64: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFF800 ); - break; - default: - uiZ0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - zSPtr->signExp = 0x7FFE; - zSPtr->signif = uiZ0; - break; - } - } - return; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FFF; - if ( exp < -70 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - switch ( slow_extF80_roundingPrecision ) { - case 32: - roundFloatXTo24( isTiny, &x, slowfloat_roundingMode, true ); - break; - case 64: - roundFloatXTo53( isTiny, &x, slowfloat_roundingMode, true ); - break; - default: - roundFloatXTo64( isTiny, &x, slowfloat_roundingMode, true ); - break; - } - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ64 = exp; - if ( x.sign ) uiZ64 |= 0x8000; - zSPtr->signExp = uiZ64; - zSPtr->signif = shortShiftRightJam128( x.sig, 56 ).v0; - -} - -#endif - -#ifdef FLOAT128 - -static void f128MToFloatX( const float128_t *aPtr, struct floatX *xPtr ) -{ - const struct uint128 *uiAPtr; - uint_fast64_t uiA64; - int_fast32_t exp; - struct uint128 sig; - - uiAPtr = (const struct uint128 *) aPtr; - xPtr->isNaN = false; - xPtr->isInf = false; - xPtr->isZero = false; - uiA64 = uiAPtr->v64; - xPtr->sign = ((uiA64 & UINT64_C( 0x8000000000000000 )) != 0); - exp = uiA64>>48 & 0x7FFF; - sig.v64 = uiA64 & UINT64_C( 0x0000FFFFFFFFFFFF ); - sig.v0 = uiAPtr->v0; - if ( exp == 0x7FFF ) { - if ( sig.v64 || sig.v0 ) { - xPtr->isNaN = true; - } else { - xPtr->isInf = true; - } - } else if ( !exp ) { - if ( !sig.v64 && !sig.v0 ) { - xPtr->isZero = true; - } else { - exp = 1 - 0x3FFF; - do { - --exp; - sig = shortShiftLeft128( sig, 1 ); - } while ( sig.v64 < UINT64_C( 0x0001000000000000 ) ); - xPtr->exp = exp; - } - } else { - xPtr->exp = exp - 0x3FFF; - sig.v64 |= UINT64_C( 0x0001000000000000 ); - } - xPtr->sig = shortShiftLeft128( sig, 7 ); - -} - -static void floatXToF128M( const struct floatX *xPtr, float128_t *zPtr ) -{ - struct uint128 *uiZPtr; - struct floatX x, savedX; - bool isTiny; - int_fast32_t exp; - uint_fast64_t uiZ64; - - uiZPtr = (struct uint128 *) zPtr; - if ( xPtr->isNaN ) { - uiZPtr->v64 = uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - return; - } - if ( xPtr->isInf ) { - uiZPtr->v64 = - xPtr->sign ? UINT64_C( 0xFFFF000000000000 ) - : UINT64_C( 0x7FFF000000000000 ); - uiZPtr->v0 = 0; - return; - } - if ( xPtr->isZero ) { - uiZPtr->v64 = xPtr->sign ? UINT64_C( 0x8000000000000000 ) : 0; - uiZPtr->v0 = 0; - return; - } - x = *xPtr; - while ( UINT64_C( 0x0100000000000000 ) <= x.sig.v64 ) { - ++x.exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - while ( x.sig.v64 < UINT64_C( 0x0080000000000000 ) ) { - --x.exp; - x.sig = shortShiftLeft128( x.sig, 1 ); - } - savedX = x; - isTiny = - (slowfloat_detectTininess == softfloat_tininess_beforeRounding) - && (x.exp + 0x3FFF <= 0); - roundFloatXTo113( isTiny, &x, slowfloat_roundingMode, true ); - exp = x.exp + 0x3FFF; - if ( 0x7FFF <= exp ) { - slowfloat_exceptionFlags |= - softfloat_flag_overflow | softfloat_flag_inexact; - if ( x.sign ) { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_min: - case softfloat_round_near_maxMag: - uiZPtr->v64 = UINT64_C( 0xFFFF000000000000 ); - uiZPtr->v0 = 0; - break; - case softfloat_round_minMag: - case softfloat_round_max: - case softfloat_round_odd: - uiZPtr->v64 = UINT64_C( 0xFFFEFFFFFFFFFFFF ); - uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - } else { - switch ( slowfloat_roundingMode ) { - case softfloat_round_near_even: - case softfloat_round_max: - case softfloat_round_near_maxMag: - uiZPtr->v64 = UINT64_C( 0x7FFF000000000000 ); - uiZPtr->v0 = 0; - break; - case softfloat_round_minMag: - case softfloat_round_min: - case softfloat_round_odd: - uiZPtr->v64 = UINT64_C( 0x7FFEFFFFFFFFFFFF ); - uiZPtr->v0 = UINT64_C( 0xFFFFFFFFFFFFFFFF ); - break; - } - } - return; - } - if ( exp <= 0 ) { - isTiny = true; - x = savedX; - exp = x.exp + 0x3FFF; - if ( exp < -120 ) { - x.sig.v0 = (x.sig.v64 != 0) || (x.sig.v0 != 0); - x.sig.v64 = 0; - } else { - while ( exp <= 0 ) { - ++exp; - x.sig = shortShiftRightJam128( x.sig, 1 ); - } - } - roundFloatXTo113( isTiny, &x, slowfloat_roundingMode, true ); - exp = (UINT64_C( 0x0080000000000000 ) <= x.sig.v64) ? 1 : 0; - } - uiZ64 = (uint_fast64_t) exp<<48; - if ( x.sign ) uiZ64 |= UINT64_C( 0x8000000000000000 ); - x.sig = shortShiftRightJam128( x.sig, 7 ); - uiZPtr->v64 = uiZ64 | (x.sig.v64 & UINT64_C( 0x0000FFFFFFFFFFFF )); - uiZPtr->v0 = x.sig.v0; - -} - -#endif - -static void floatXInvalid( struct floatX *xPtr ) -{ - - slowfloat_exceptionFlags |= softfloat_flag_invalid; - *xPtr = floatXNaN; - -} - -static -void - floatXRoundToInt( struct floatX *xPtr, uint_fast8_t roundingMode, bool exact ) -{ - int_fast32_t exp, shiftDist; - struct uint128 sig; - - if ( xPtr->isNaN || xPtr->isInf ) return; - exp = xPtr->exp; - shiftDist = 112 - exp; - if ( shiftDist <= 0 ) return; - if ( 119 < shiftDist ) { - xPtr->exp = 112; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = !xPtr->isZero; - } else { - sig = xPtr->sig; - while ( 0 < shiftDist ) { - ++exp; - sig = shortShiftRightJam128( sig, 1 ); - --shiftDist; - } - xPtr->exp = exp; - xPtr->sig = sig; - } - roundFloatXTo113( false, xPtr, roundingMode, exact ); - if ( !xPtr->sig.v64 && !xPtr->sig.v0 ) xPtr->isZero = true; - -} - -static void floatXAdd( struct floatX *xPtr, const struct floatX *yPtr ) -{ - int_fast32_t expX, expY, expDiff; - struct uint128 sigY; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) goto copyY; - if ( xPtr->isInf && yPtr->isInf ) { - if ( xPtr->sign != yPtr->sign ) floatXInvalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( yPtr->isInf ) goto copyY; - if ( xPtr->isZero && yPtr->isZero ) { - if ( xPtr->sign == yPtr->sign ) return; - goto completeCancellation; - } - expX = xPtr->exp; - expY = yPtr->exp; - if ( - (xPtr->sign != yPtr->sign) && (expX == expY) - && eq128( xPtr->sig, yPtr->sig ) - ) { - completeCancellation: - if (slowfloat_roundingMode == softfloat_round_min) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - if ( xPtr->isZero ) goto copyY; - if ( yPtr->isZero ) return; - expDiff = expX - expY; - if ( expDiff < 0 ) { - xPtr->exp = expY; - if ( expDiff < -120 ) { - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 1; - } else { - while ( expDiff < 0 ) { - ++expDiff; - xPtr->sig = shortShiftRightJam128( xPtr->sig, 1 ); - } - } - if ( xPtr->sign != yPtr->sign ) xPtr->sig = neg128( xPtr->sig ); - xPtr->sign = yPtr->sign; - xPtr->sig = add128( xPtr->sig, yPtr->sig ); - } else { - sigY = yPtr->sig; - if ( 120 < expDiff ) { - sigY.v64 = 0; - sigY.v0 = 1; - } else { - while ( 0 < expDiff ) { - --expDiff; - sigY = shortShiftRightJam128( sigY, 1 ); - } - } - if ( xPtr->sign != yPtr->sign ) sigY = neg128( sigY ); - xPtr->sig = add128( xPtr->sig, sigY ); - } - if ( xPtr->sig.v64 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sign = !xPtr->sign; - xPtr->sig = neg128( xPtr->sig ); - } - return; - copyY: - *xPtr = *yPtr; - -} - -static void floatXMul( struct floatX *xPtr, const struct floatX *yPtr ) -{ - struct uint128 sig; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isZero ) floatXInvalid( xPtr ); - return; - } - if ( yPtr->isInf ) { - if ( xPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isZero ) { - if ( xPtr->sign ) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - xPtr->exp += yPtr->exp; - sig.v64 = 0; - sig.v0 = 0; - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - sig = shortShiftRightJam128( sig, 1 ); - if ( xPtr->sig.v0 & 1 ) sig = add128( sig, yPtr->sig ); - xPtr->sig = shortShiftRight128( xPtr->sig, 1 ); - } - if ( UINT64_C( 0x0100000000000000 ) <= sig.v64 ) { - ++xPtr->exp; - sig = shortShiftRightJam128( sig, 1 ); - } - xPtr->sig = sig; - -} - -static void floatXDiv( struct floatX *xPtr, const struct floatX *yPtr ) -{ - struct uint128 sig, negSigY; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isInf ) floatXInvalid( xPtr ); - return; - } - if ( yPtr->isZero ) { - if ( xPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - slowfloat_exceptionFlags |= softfloat_flag_infinite; - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isInf ) { - if ( xPtr->sign ) { - *xPtr = floatXNegativeZero; - } else { - *xPtr = floatXPositiveZero; - } - return; - } - xPtr->exp -= yPtr->exp + 1; - sig.v64 = 0; - sig.v0 = 0; - negSigY = neg128( yPtr->sig ); - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - if ( le128( yPtr->sig, xPtr->sig ) ) { - sig.v0 |= 1; - xPtr->sig = add128( xPtr->sig, negSigY ); - } - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - sig = shortShiftLeft128( sig, 1 ); - } - if ( xPtr->sig.v64 || xPtr->sig.v0 ) sig.v0 |= 1; - xPtr->sig = sig; - -} - -static void floatXRem( struct floatX *xPtr, const struct floatX *yPtr ) -{ - int_fast32_t expX, expY; - struct uint128 sigY, negSigY; - bool lastQuotientBit; - struct uint128 savedSigX; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( xPtr->isInf || yPtr->isZero ) { - floatXInvalid( xPtr ); - return; - } - if ( xPtr->isZero || yPtr->isInf ) return; - expX = xPtr->exp; - expY = yPtr->exp - 1; - if ( expX < expY ) return; - sigY = shortShiftLeft128( yPtr->sig, 1 ); - negSigY = neg128( sigY ); - while ( expY < expX ) { - --expX; - if ( le128( sigY, xPtr->sig ) ) { - xPtr->sig = add128( xPtr->sig, negSigY ); - } - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - } - xPtr->exp = expX; - lastQuotientBit = le128( sigY, xPtr->sig ); - if ( lastQuotientBit ) xPtr->sig = add128( xPtr->sig, negSigY ); - savedSigX = xPtr->sig; - xPtr->sig = neg128( add128( xPtr->sig, negSigY ) ); - if ( lt128( xPtr->sig, savedSigX ) ) { - xPtr->sign = !xPtr->sign; - } else if ( lt128( savedSigX, xPtr->sig ) ) { - goto restoreSavedSigX; - } else { - if ( lastQuotientBit ) { - xPtr->sign = !xPtr->sign; - } else { - restoreSavedSigX: - xPtr->sig = savedSigX; - } - } - if ( !xPtr->sig.v64 && !xPtr->sig.v0 ) xPtr->isZero = true; - -} - -static void floatXSqrt( struct floatX *xPtr ) -{ - struct uint128 sig, bitSig; - int bitNum; - struct uint128 savedSigX; - - if ( xPtr->isNaN || xPtr->isZero ) return; - if ( xPtr->sign ) { - floatXInvalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( !(xPtr->exp & 1) ) xPtr->sig = shortShiftRightJam128( xPtr->sig, 1 ); - xPtr->exp >>= 1; - sig.v64 = 0; - sig.v0 = 0; - bitSig.v64 = UINT64_C( 0x0080000000000000 ); - bitSig.v0 = 0; - for ( bitNum = 0; bitNum < 120; ++bitNum ) { - savedSigX = xPtr->sig; - xPtr->sig = add128( xPtr->sig, neg128( sig ) ); - xPtr->sig = shortShiftLeft128( xPtr->sig, 1 ); - xPtr->sig = add128( xPtr->sig, neg128( bitSig ) ); - if ( xPtr->sig.v64 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sig = shortShiftLeft128( savedSigX, 1 ); - } else { - sig.v64 |= bitSig.v64; - sig.v0 |= bitSig.v0; - } - bitSig = shortShiftRightJam128( bitSig, 1 ); - } - if ( xPtr->sig.v64 || xPtr->sig.v0 ) sig.v0 |= 1; - xPtr->sig = sig; - -} - -static bool floatXEq( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return true; - if ( xPtr->sign != yPtr->sign ) return false; - if ( xPtr->isInf || yPtr->isInf ) return xPtr->isInf && yPtr->isInf; - return ( xPtr->exp == yPtr->exp ) && eq128( xPtr->sig, yPtr->sig ); - -} - -static bool floatXLe( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return true; - if ( xPtr->sign != yPtr->sign ) return xPtr->sign; - if ( xPtr->sign ) { - if ( xPtr->isInf || yPtr->isZero ) return true; - if ( yPtr->isInf || xPtr->isZero ) return false; - if ( yPtr->exp < xPtr->exp ) return true; - if ( xPtr->exp < yPtr->exp ) return false; - return le128( yPtr->sig, xPtr->sig ); - } else { - if ( yPtr->isInf || xPtr->isZero ) return true; - if ( xPtr->isInf || yPtr->isZero ) return false; - if ( xPtr->exp < yPtr->exp ) return true; - if ( yPtr->exp < xPtr->exp ) return false; - return le128( xPtr->sig, yPtr->sig ); - } - -} - -static bool floatXLt( const struct floatX *xPtr, const struct floatX *yPtr ) -{ - - if ( xPtr->isNaN || yPtr->isNaN ) return false; - if ( xPtr->isZero && yPtr->isZero ) return false; - if ( xPtr->sign != yPtr->sign ) return xPtr->sign; - if ( xPtr->isInf && yPtr->isInf ) return false; - if ( xPtr->sign ) { - if ( xPtr->isInf || yPtr->isZero ) return true; - if ( yPtr->isInf || xPtr->isZero ) return false; - if ( yPtr->exp < xPtr->exp ) return true; - if ( xPtr->exp < yPtr->exp ) return false; - return lt128( yPtr->sig, xPtr->sig ); - } else { - if ( yPtr->isInf || xPtr->isZero ) return true; - if ( xPtr->isInf || yPtr->isZero ) return false; - if ( xPtr->exp < yPtr->exp ) return true; - if ( yPtr->exp < xPtr->exp ) return false; - return lt128( xPtr->sig, yPtr->sig ); - } - -} - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined EXTFLOAT80 || defined FLOAT128 - -#ifdef LITTLEENDIAN -struct uint256 { uint64_t v0, v64, v128, v192; }; -#else -struct uint256 { uint64_t v192, v128, v64, v0; }; -#endif - -static bool eq256M( const struct uint256 *aPtr, const struct uint256 *bPtr ) -{ - - return - (aPtr->v192 == bPtr->v192) && (aPtr->v128 == bPtr->v128) - && (aPtr->v64 == bPtr->v64) && (aPtr->v0 == bPtr->v0); - -} - -static void shiftLeft1256M( struct uint256 *ptr ) -{ - uint64_t dword1, dword2; - - dword1 = ptr->v128; - ptr->v192 = ptr->v192<<1 | dword1>>63; - dword2 = ptr->v64; - ptr->v128 = dword1<<1 | dword2>>63; - dword1 = ptr->v0; - ptr->v64 = dword2<<1 | dword1>>63; - ptr->v0 = dword1<<1; - -} - -static void shiftRight1256M( struct uint256 *ptr ) -{ - uint64_t dword1, dword2; - - dword1 = ptr->v64; - ptr->v0 = dword1<<63 | ptr->v0>>1; - dword2 = ptr->v128; - ptr->v64 = dword2<<63 | dword1>>1; - dword1 = ptr->v192; - ptr->v128 = dword1<<63 | dword2>>1; - ptr->v192 = dword1>>1; - -} - -static void shiftRight1Jam256M( struct uint256 *ptr ) -{ - int extra; - - extra = ptr->v0 & 1; - shiftRight1256M( ptr ); - ptr->v0 |= extra; - -} - -static void neg256M( struct uint256 *ptr ) -{ - uint64_t v64, v0, v128; - - v64 = ptr->v64; - v0 = ptr->v0; - if ( v64 | v0 ) { - ptr->v192 = ~ptr->v192; - ptr->v128 = ~ptr->v128; - if ( v0 ) { - ptr->v64 = ~v64; - ptr->v0 = -v0; - } else { - ptr->v64 = -v64; - } - } else { - v128 = ptr->v128; - if ( v128 ) { - ptr->v192 = ~ptr->v192; - ptr->v128 = -v128; - } else { - ptr->v192 = -ptr->v192; - } - } - -} - -static void add256M( struct uint256 *aPtr, const struct uint256 *bPtr ) -{ - uint64_t dwordA, dwordZ; - unsigned int carry1, carry2; - - dwordA = aPtr->v0; - dwordZ = dwordA + bPtr->v0; - carry1 = (dwordZ < dwordA); - aPtr->v0 = dwordZ; - dwordA = aPtr->v64; - dwordZ = dwordA + bPtr->v64; - carry2 = (dwordZ < dwordA); - dwordZ += carry1; - carry2 += (dwordZ < carry1); - aPtr->v64 = dwordZ; - dwordA = aPtr->v128; - dwordZ = dwordA + bPtr->v128; - carry1 = (dwordZ < dwordA); - dwordZ += carry2; - carry1 += (dwordZ < carry2); - aPtr->v128 = dwordZ; - aPtr->v192 = aPtr->v192 + bPtr->v192 + carry1; - -} - -struct floatX256 { - bool isNaN; - bool isInf; - bool isZero; - bool sign; - int_fast32_t exp; - struct uint256 sig; -}; - -static const struct floatX256 floatX256NaN = - { true, false, false, false, 0, { 0, 0, 0, 0 } }; -static const struct floatX256 floatX256PositiveZero = - { false, false, true, false, 0, { 0, 0, 0, 0 } }; -static const struct floatX256 floatX256NegativeZero = - { false, false, true, true, 0, { 0, 0, 0, 0 } }; - -#ifdef FLOAT128 - -static void f128MToFloatX256( const float128_t *aPtr, struct floatX256 *xPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - xPtr->isNaN = x.isNaN; - xPtr->isInf = x.isInf; - xPtr->isZero = x.isZero; - xPtr->sign = x.sign; - xPtr->exp = x.exp; - xPtr->sig.v192 = x.sig.v64; - xPtr->sig.v128 = x.sig.v0; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 0; - -} - -static void floatX256ToF128M( const struct floatX256 *xPtr, float128_t *zPtr ) -{ - struct floatX x; - int_fast32_t expZ; - struct uint256 sig; - - x.isNaN = xPtr->isNaN; - x.isInf = xPtr->isInf; - x.isZero = xPtr->isZero; - x.sign = xPtr->sign; - if ( !(x.isNaN | x.isInf | x.isZero) ) { - expZ = xPtr->exp; - sig = xPtr->sig; - while ( !sig.v192 ) { - expZ -= 64; - sig.v192 = sig.v128; - sig.v128 = sig.v64; - sig.v64 = sig.v0; - sig.v0 = 0; - } - while ( sig.v192 < UINT64_C( 0x0100000000000000 ) ) { - --expZ; - shiftLeft1256M( &sig ); - } - x.exp = expZ; - x.sig.v64 = sig.v192; - x.sig.v0 = sig.v128 | ((sig.v64 | sig.v0) != 0); - } - floatXToF128M( &x, zPtr ); - -} - -#endif - -static void floatX256Invalid( struct floatX256 *xPtr ) -{ - - slowfloat_exceptionFlags |= softfloat_flag_invalid; - *xPtr = floatX256NaN; - -} - -static -void floatX256Add( struct floatX256 *xPtr, const struct floatX256 *yPtr ) -{ - int_fast32_t expX, expY, expDiff; - struct uint256 sigY; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) goto copyY; - if ( xPtr->isInf && yPtr->isInf ) { - if ( xPtr->sign != yPtr->sign ) floatX256Invalid( xPtr ); - return; - } - if ( xPtr->isInf ) return; - if ( yPtr->isInf ) goto copyY; - if ( xPtr->isZero && yPtr->isZero ) { - if ( xPtr->sign == yPtr->sign ) return; - goto completeCancellation; - } - expX = xPtr->exp; - expY = yPtr->exp; - if ( - (xPtr->sign != yPtr->sign) && (expX == expY) - && eq256M( &xPtr->sig, &yPtr->sig ) - ) { - completeCancellation: - if (slowfloat_roundingMode == softfloat_round_min) { - *xPtr = floatX256NegativeZero; - } else { - *xPtr = floatX256PositiveZero; - } - return; - } - if ( xPtr->isZero ) goto copyY; - if ( yPtr->isZero ) return; - expDiff = expX - expY; - if ( expDiff < 0 ) { - xPtr->exp = expY; - if ( expDiff < -248 ) { - xPtr->sig.v192 = 0; - xPtr->sig.v128 = 0; - xPtr->sig.v64 = 0; - xPtr->sig.v0 = 1; - } else { - while ( expDiff < 0 ) { - ++expDiff; - shiftRight1Jam256M( &xPtr->sig ); - } - } - if ( xPtr->sign != yPtr->sign ) neg256M( &xPtr->sig ); - xPtr->sign = yPtr->sign; - add256M( &xPtr->sig, &yPtr->sig ); - } else { - sigY = yPtr->sig; - if ( 248 < expDiff ) { - sigY.v192 = 0; - sigY.v128 = 0; - sigY.v64 = 0; - sigY.v0 = 1; - } else { - while ( 0 < expDiff ) { - --expDiff; - shiftRight1Jam256M( &sigY ); - } - } - if ( xPtr->sign != yPtr->sign ) neg256M( &sigY ); - add256M( &xPtr->sig, &sigY ); - } - if ( xPtr->sig.v192 & UINT64_C( 0x8000000000000000 ) ) { - xPtr->sign = !xPtr->sign; - neg256M( &xPtr->sig ); - } - return; - copyY: - *xPtr = *yPtr; - -} - -static -void floatX256Mul( struct floatX256 *xPtr, const struct floatX256 *yPtr ) -{ - struct uint256 sig; - int bitNum; - - if ( xPtr->isNaN ) return; - if ( yPtr->isNaN ) { - xPtr->isNaN = true; - xPtr->isInf = false; - xPtr->isZero = false; - xPtr->sign = yPtr->sign; - return; - } - if ( yPtr->sign ) xPtr->sign = !xPtr->sign; - if ( xPtr->isInf ) { - if ( yPtr->isZero ) floatX256Invalid( xPtr ); - return; - } - if ( yPtr->isInf ) { - if ( xPtr->isZero ) { - floatX256Invalid( xPtr ); - return; - } - xPtr->isInf = true; - return; - } - if ( xPtr->isZero || yPtr->isZero ) { - if ( xPtr->sign ) { - *xPtr = floatX256NegativeZero; - } else { - *xPtr = floatX256PositiveZero; - } - return; - } - xPtr->exp += yPtr->exp; - sig.v192 = 0; - sig.v128 = 0; - sig.v64 = 0; - sig.v0 = 0; - for ( bitNum = 0; bitNum < 248; ++bitNum ) { - shiftRight1Jam256M( &sig ); - if ( xPtr->sig.v0 & 1 ) add256M( &sig, &yPtr->sig ); - shiftRight1256M( &xPtr->sig ); - } - if ( UINT64_C( 0x0100000000000000 ) <= sig.v192 ) { - ++xPtr->exp; - shiftRight1Jam256M( &sig ); - } - xPtr->sig = sig; - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#ifdef FLOAT16 - -float16_t slow_ui32_to_f16( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_ui32_to_f32( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_ui32_to_f64( uint32_t a ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - struct floatX x; - - ui32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_ui64_to_f16( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_ui64_to_f32( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_ui64_to_f64( uint64_t a ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - struct floatX x; - - ui64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_i32_to_f16( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_i32_to_f32( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_i32_to_f64( int32_t a ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - struct floatX x; - - i32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -float16_t slow_i64_to_f16( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_i64_to_f32( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_i64_to_f64( int64_t a ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - struct floatX x; - - i64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT16 - -uint_fast32_t - slow_f16_to_ui32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f16_to_ui64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f16_to_i32( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f16_to_i64( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f16_to_ui32_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f16_to_ui64_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f16_to_i32_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f16_to_i64_r_minMag( float16_t a, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -float32_t slow_f16_to_f32( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_f16_to_f64( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f16_to_extF80M( float16_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f16_to_f128M( float16_t a, float128_t *zPtr ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float16_t - slow_f16_roundToInt( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_add( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_sub( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF16( &x ); - - -} - -float16_t slow_f16_mul( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_mulAdd( float16_t a, float16_t b, float16_t c ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXMul( &x, &y ); - f16ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_div( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_rem( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF16( &x ); - -} - -float16_t slow_f16_sqrt( float16_t a ) -{ - struct floatX x; - - f16ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF16( &x ); - -} - -bool slow_f16_eq( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f16_le( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f16_lt( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f16_eq_signaling( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f16_le_quiet( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f16_lt_quiet( float16_t a, float16_t b ) -{ - struct floatX x, y; - - f16ToFloatX( a, &x ); - f16ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -uint_fast32_t - slow_f32_to_ui32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f32_to_ui64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f32_to_i32( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f32_to_i64( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f32_to_ui32_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f32_to_ui64_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f32_to_i32_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f32_to_i64_r_minMag( float32_t a, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f32_to_f16( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -#ifdef FLOAT64 - -float64_t slow_f32_to_f64( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float32_t - slow_f32_roundToInt( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_add( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_sub( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF32( &x ); - - -} - -float32_t slow_f32_mul( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXMul( &x, &y ); - f32ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_div( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_rem( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF32( &x ); - -} - -float32_t slow_f32_sqrt( float32_t a ) -{ - struct floatX x; - - f32ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF32( &x ); - -} - -bool slow_f32_eq( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f32_le( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f32_lt( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f32_eq_signaling( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f32_le_quiet( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f32_lt_quiet( float32_t a, float32_t b ) -{ - struct floatX x, y; - - f32ToFloatX( a, &x ); - f32ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#ifdef FLOAT64 - -uint_fast32_t - slow_f64_to_ui32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f64_to_ui64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f64_to_i32( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f64_to_i64( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f64_to_ui32_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f64_to_ui64_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f64_to_i32_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f64_to_i64_r_minMag( float64_t a, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f64_to_f16( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_f64_to_f32( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - return floatXToF32( &x ); - -} - -#ifdef EXTFLOAT80 - -void slow_f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -float64_t - slow_f64_roundToInt( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_add( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_sub( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_mul( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXMul( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXMul( &x, &y ); - f64ToFloatX( c, &y ); - floatXAdd( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_div( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXDiv( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_rem( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - floatXRem( &x, &y ); - return floatXToF64( &x ); - -} - -float64_t slow_f64_sqrt( float64_t a ) -{ - struct floatX x; - - f64ToFloatX( a, &x ); - floatXSqrt( &x ); - return floatXToF64( &x ); - -} - -bool slow_f64_eq( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f64_le( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f64_lt( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f64_eq_signaling( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f64_le_quiet( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f64_lt_quiet( float64_t a, float64_t b ) -{ - struct floatX x, y; - - f64ToFloatX( a, &x ); - f64ToFloatX( b, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -#ifdef EXTFLOAT80 - -uint_fast32_t - slow_extF80M_to_ui32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_extF80M_to_ui64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_extF80M_to_i32( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_extF80M_to_i64( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t - slow_extF80M_to_ui32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t - slow_extF80M_to_ui64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t - slow_extF80M_to_i32_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t - slow_extF80M_to_i64_r_minMag( const extFloat80_t *aPtr, bool exact ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_extF80M_to_f16( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_extF80M_to_f32( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_extF80M_to_f64( const extFloat80_t *aPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef FLOAT128 - -void slow_extF80M_to_f128M( const extFloat80_t *aPtr, float128_t *zPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXToF128M( &x, zPtr ); - -} - -#endif - -void - slow_extF80M_roundToInt( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXAdd( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXMul( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXDiv( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void - slow_extF80M_rem( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - floatXRem( &x, &y ); - floatXToExtF80M( &x, zPtr ); - -} - -void slow_extF80M_sqrt( const extFloat80_t *aPtr, extFloat80_t *zPtr ) -{ - struct floatX x; - - extF80MToFloatX( aPtr, &x ); - floatXSqrt( &x ); - floatXToExtF80M( &x, zPtr ); - -} - -bool slow_extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool - slow_extF80M_eq_signaling( - const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_extF80M_le_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_extF80M_lt_quiet( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - struct floatX x, y; - - extF80MToFloatX( aPtr, &x ); - extF80MToFloatX( bPtr, &y ); - return floatXLt( &x, &y ); - -} - -#endif - -#ifdef FLOAT128 - -uint_fast32_t - slow_f128M_to_ui32( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI32( &x, roundingMode, exact ); - -} - -uint_fast64_t - slow_f128M_to_ui64( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI64( &x, roundingMode, exact ); - -} - -int_fast32_t - slow_f128M_to_i32( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI32( &x, roundingMode, exact ); - -} - -int_fast64_t - slow_f128M_to_i64( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI64( &x, roundingMode, exact ); - -} - -uint_fast32_t slow_f128M_to_ui32_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI32( &x, softfloat_round_minMag, exact ); - -} - -uint_fast64_t slow_f128M_to_ui64_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToUI64( &x, softfloat_round_minMag, exact ); - -} - -int_fast32_t slow_f128M_to_i32_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI32( &x, softfloat_round_minMag, exact ); - -} - -int_fast64_t slow_f128M_to_i64_r_minMag( const float128_t *aPtr, bool exact ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToI64( &x, softfloat_round_minMag, exact ); - -} - -#ifdef FLOAT16 - -float16_t slow_f128M_to_f16( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF16( &x ); - -} - -#endif - -float32_t slow_f128M_to_f32( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF32( &x ); - -} - -#ifdef FLOAT64 - -float64_t slow_f128M_to_f64( const float128_t *aPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - return floatXToF64( &x ); - -} - -#endif - -#ifdef EXTFLOAT80 - -void slow_f128M_to_extF80M( const float128_t *aPtr, extFloat80_t *zPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXToExtF80M( &x, zPtr ); - -} - -#endif - -void - slow_f128M_roundToInt( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXRoundToInt( &x, roundingMode, exact ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_add( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXAdd( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_sub( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - y.sign = !y.sign; - floatXAdd( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_mul( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXMul( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - struct floatX256 x, y; - - f128MToFloatX256( aPtr, &x ); - f128MToFloatX256( bPtr, &y ); - floatX256Mul( &x, &y ); - f128MToFloatX256( cPtr, &y ); - floatX256Add( &x, &y ); - floatX256ToF128M( &x, zPtr ); - -} - -void - slow_f128M_div( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXDiv( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void - slow_f128M_rem( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - floatXRem( &x, &y ); - floatXToF128M( &x, zPtr ); - -} - -void slow_f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - struct floatX x; - - f128MToFloatX( aPtr, &x ); - floatXSqrt( &x ); - floatXToF128M( &x, zPtr ); - -} - -bool slow_f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXEq( &x, &y ); - -} - -bool slow_f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLe( &x, &y ); - -} - -bool slow_f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXLt( &x, &y ); - -} - -bool slow_f128M_eq_signaling( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - if ( x.isNaN || y.isNaN ) { - slowfloat_exceptionFlags |= softfloat_flag_invalid; - } - return floatXEq( &x, &y ); - -} - -bool slow_f128M_le_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXLe( &x, &y ); - -} - -bool slow_f128M_lt_quiet( const float128_t *aPtr, const float128_t *bPtr ) -{ - struct floatX x, y; - - f128MToFloatX( aPtr, &x ); - f128MToFloatX( bPtr, &y ); - return floatXLt( &x, &y ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/slowfloat.h b/addins/TestFloat-3e/source/slowfloat.h deleted file mode 100644 index 7af1d1eb5..000000000 --- a/addins/TestFloat-3e/source/slowfloat.h +++ /dev/null @@ -1,298 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "softfloat.h" - -extern uint_fast8_t slowfloat_roundingMode; -extern uint_fast8_t slowfloat_detectTininess; -extern uint_fast8_t slowfloat_exceptionFlags; -#ifdef EXTFLOAT80 -extern uint_fast8_t slow_extF80_roundingPrecision; -#endif - -#ifdef FLOAT16 -float16_t slow_ui32_to_f16( uint32_t ); -#endif -float32_t slow_ui32_to_f32( uint32_t ); -#ifdef FLOAT64 -float64_t slow_ui32_to_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_ui32_to_extF80M( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_ui32_to_f128M( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_ui64_to_f16( uint64_t ); -#endif -float32_t slow_ui64_to_f32( uint64_t ); -#ifdef FLOAT64 -float64_t slow_ui64_to_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -void slow_ui64_to_extF80M( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_ui64_to_f128M( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_i32_to_f16( int32_t ); -#endif -float32_t slow_i32_to_f32( int32_t ); -#ifdef FLOAT64 -float64_t slow_i32_to_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_i32_to_extF80M( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_i32_to_f128M( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t slow_i64_to_f16( int64_t ); -#endif -float32_t slow_i64_to_f32( int64_t ); -#ifdef FLOAT64 -float64_t slow_i64_to_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -void slow_i64_to_extF80M( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_i64_to_f128M( int64_t, float128_t * ); -#endif - -#ifdef FLOAT16 -uint_fast32_t slow_f16_to_ui32( float16_t, uint_fast8_t, bool ); -uint_fast64_t slow_f16_to_ui64( float16_t, uint_fast8_t, bool ); -int_fast32_t slow_f16_to_i32( float16_t, uint_fast8_t, bool ); -int_fast64_t slow_f16_to_i64( float16_t, uint_fast8_t, bool ); -uint_fast32_t slow_f16_to_ui32_r_minMag( float16_t, bool ); -uint_fast64_t slow_f16_to_ui64_r_minMag( float16_t, bool ); -int_fast32_t slow_f16_to_i32_r_minMag( float16_t, bool ); -int_fast64_t slow_f16_to_i64_r_minMag( float16_t, bool ); -float32_t slow_f16_to_f32( float16_t ); -#ifdef FLOAT64 -float64_t slow_f16_to_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -void slow_f16_to_extF80M( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f16_to_f128M( float16_t, float128_t * ); -#endif -float16_t slow_f16_roundToInt( float16_t, uint_fast8_t, bool ); -float16_t slow_f16_add( float16_t, float16_t ); -float16_t slow_f16_sub( float16_t, float16_t ); -float16_t slow_f16_mul( float16_t, float16_t ); -float16_t slow_f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t slow_f16_div( float16_t, float16_t ); -float16_t slow_f16_rem( float16_t, float16_t ); -float16_t slow_f16_sqrt( float16_t ); -bool slow_f16_eq( float16_t, float16_t ); -bool slow_f16_le( float16_t, float16_t ); -bool slow_f16_lt( float16_t, float16_t ); -bool slow_f16_eq_signaling( float16_t, float16_t ); -bool slow_f16_le_quiet( float16_t, float16_t ); -bool slow_f16_lt_quiet( float16_t, float16_t ); -#endif - -uint_fast32_t slow_f32_to_ui32( float32_t, uint_fast8_t, bool ); -uint_fast64_t slow_f32_to_ui64( float32_t, uint_fast8_t, bool ); -int_fast32_t slow_f32_to_i32( float32_t, uint_fast8_t, bool ); -int_fast64_t slow_f32_to_i64( float32_t, uint_fast8_t, bool ); -uint_fast32_t slow_f32_to_ui32_r_minMag( float32_t, bool ); -uint_fast64_t slow_f32_to_ui64_r_minMag( float32_t, bool ); -int_fast32_t slow_f32_to_i32_r_minMag( float32_t, bool ); -int_fast64_t slow_f32_to_i64_r_minMag( float32_t, bool ); -#ifdef FLOAT16 -float16_t slow_f32_to_f16( float32_t ); -#endif -#ifdef FLOAT64 -float64_t slow_f32_to_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -void slow_f32_to_extF80M( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f32_to_f128M( float32_t, float128_t * ); -#endif -float32_t slow_f32_roundToInt( float32_t, uint_fast8_t, bool ); -float32_t slow_f32_add( float32_t, float32_t ); -float32_t slow_f32_sub( float32_t, float32_t ); -float32_t slow_f32_mul( float32_t, float32_t ); -float32_t slow_f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t slow_f32_div( float32_t, float32_t ); -float32_t slow_f32_rem( float32_t, float32_t ); -float32_t slow_f32_sqrt( float32_t ); -bool slow_f32_eq( float32_t, float32_t ); -bool slow_f32_le( float32_t, float32_t ); -bool slow_f32_lt( float32_t, float32_t ); -bool slow_f32_eq_signaling( float32_t, float32_t ); -bool slow_f32_le_quiet( float32_t, float32_t ); -bool slow_f32_lt_quiet( float32_t, float32_t ); - -#ifdef FLOAT64 -uint_fast32_t slow_f64_to_ui32( float64_t, uint_fast8_t, bool ); -uint_fast64_t slow_f64_to_ui64( float64_t, uint_fast8_t, bool ); -int_fast32_t slow_f64_to_i32( float64_t, uint_fast8_t, bool ); -int_fast64_t slow_f64_to_i64( float64_t, uint_fast8_t, bool ); -uint_fast32_t slow_f64_to_ui32_r_minMag( float64_t, bool ); -uint_fast64_t slow_f64_to_ui64_r_minMag( float64_t, bool ); -int_fast32_t slow_f64_to_i32_r_minMag( float64_t, bool ); -int_fast64_t slow_f64_to_i64_r_minMag( float64_t, bool ); -#ifdef FLOAT16 -float16_t slow_f64_to_f16( float64_t ); -#endif -float32_t slow_f64_to_f32( float64_t ); -#ifdef EXTFLOAT80 -void slow_f64_to_extF80M( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_f64_to_f128M( float64_t, float128_t * ); -#endif -float64_t slow_f64_roundToInt( float64_t, uint_fast8_t, bool ); -float64_t slow_f64_add( float64_t, float64_t ); -float64_t slow_f64_sub( float64_t, float64_t ); -float64_t slow_f64_mul( float64_t, float64_t ); -float64_t slow_f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t slow_f64_div( float64_t, float64_t ); -float64_t slow_f64_rem( float64_t, float64_t ); -float64_t slow_f64_sqrt( float64_t ); -bool slow_f64_eq( float64_t, float64_t ); -bool slow_f64_le( float64_t, float64_t ); -bool slow_f64_lt( float64_t, float64_t ); -bool slow_f64_eq_signaling( float64_t, float64_t ); -bool slow_f64_le_quiet( float64_t, float64_t ); -bool slow_f64_lt_quiet( float64_t, float64_t ); -#endif - -#ifdef EXTFLOAT80 -uint_fast32_t slow_extF80M_to_ui32( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast64_t slow_extF80M_to_ui64( const extFloat80_t *, uint_fast8_t, bool ); -int_fast32_t slow_extF80M_to_i32( const extFloat80_t *, uint_fast8_t, bool ); -int_fast64_t slow_extF80M_to_i64( const extFloat80_t *, uint_fast8_t, bool ); -uint_fast32_t slow_extF80M_to_ui32_r_minMag( const extFloat80_t *, bool ); -uint_fast64_t slow_extF80M_to_ui64_r_minMag( const extFloat80_t *, bool ); -int_fast32_t slow_extF80M_to_i32_r_minMag( const extFloat80_t *, bool ); -int_fast64_t slow_extF80M_to_i64_r_minMag( const extFloat80_t *, bool ); -#ifdef FLOAT16 -float16_t slow_extF80M_to_f16( const extFloat80_t * ); -#endif -float32_t slow_extF80M_to_f32( const extFloat80_t * ); -#ifdef FLOAT64 -float64_t slow_extF80M_to_f64( const extFloat80_t * ); -#endif -#ifdef FLOAT128 -void slow_extF80M_to_f128M( const extFloat80_t *, float128_t * ); -#endif -void - slow_extF80M_roundToInt( - const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ); -void - slow_extF80M_add( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_sub( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_mul( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_mulAdd( - const extFloat80_t *, - const extFloat80_t *, - const extFloat80_t *, - extFloat80_t * - ); -void - slow_extF80M_div( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - slow_extF80M_rem( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void slow_extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool slow_extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool slow_extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); -#endif - -#ifdef FLOAT128 -uint_fast32_t slow_f128M_to_ui32( const float128_t *, uint_fast8_t, bool ); -uint_fast64_t slow_f128M_to_ui64( const float128_t *, uint_fast8_t, bool ); -int_fast32_t slow_f128M_to_i32( const float128_t *, uint_fast8_t, bool ); -int_fast64_t slow_f128M_to_i64( const float128_t *, uint_fast8_t, bool ); -uint_fast32_t slow_f128M_to_ui32_r_minMag( const float128_t *, bool ); -uint_fast64_t slow_f128M_to_ui64_r_minMag( const float128_t *, bool ); -int_fast32_t slow_f128M_to_i32_r_minMag( const float128_t *, bool ); -int_fast64_t slow_f128M_to_i64_r_minMag( const float128_t *, bool ); -#ifdef FLOAT16 -float16_t slow_f128M_to_f16( const float128_t * ); -#endif -float32_t slow_f128M_to_f32( const float128_t * ); -#ifdef FLOAT64 -float64_t slow_f128M_to_f64( const float128_t * ); -#endif -#ifdef EXTFLOAT80 -void slow_f128M_to_extF80M( const float128_t *, extFloat80_t * ); -#endif -void - slow_f128M_roundToInt( const float128_t *, uint_fast8_t, bool, float128_t * ); -void slow_f128M_add( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - slow_f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void slow_f128M_div( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void slow_f128M_sqrt( const float128_t *, float128_t * ); -bool slow_f128M_eq( const float128_t *, const float128_t * ); -bool slow_f128M_le( const float128_t *, const float128_t * ); -bool slow_f128M_lt( const float128_t *, const float128_t * ); -bool slow_f128M_eq_signaling( const float128_t *, const float128_t * ); -bool slow_f128M_le_quiet( const float128_t *, const float128_t * ); -bool slow_f128M_lt_quiet( const float128_t *, const float128_t * ); -#endif - diff --git a/addins/TestFloat-3e/source/standardFunctionInfos.c b/addins/TestFloat-3e/source/standardFunctionInfos.c deleted file mode 100644 index fa6a61dc5..000000000 --- a/addins/TestFloat-3e/source/standardFunctionInfos.c +++ /dev/null @@ -1,471 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "functions.h" - -#define RNEVEN ROUND_NEAR_EVEN -#define RMINM ROUND_MINMAG -#define RMIN ROUND_MIN -#define RMAX ROUND_MAX -#define RNMAXM ROUND_NEAR_MAXMAG - -const struct standardFunctionInfo standardFunctionInfos[] = { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "ui32_to_f16", UI32_TO_F16, 0, 0 }, -#endif - { "ui32_to_f32", UI32_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "ui32_to_f64", UI32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "ui32_to_extF80", UI32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "ui32_to_f128", UI32_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "ui64_to_f16", UI64_TO_F16, 0, 0 }, -#endif - { "ui64_to_f32", UI64_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "ui64_to_f64", UI64_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "ui64_to_extF80", UI64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "ui64_to_f128", UI64_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "i32_to_f16", I32_TO_F16, 0, 0 }, -#endif - { "i32_to_f32", I32_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "i32_to_f64", I32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "i32_to_extF80", I32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "i32_to_f128", I32_TO_F128, 0, 0 }, -#endif -#ifdef FLOAT16 - { "i64_to_f16", I64_TO_F16, 0, 0 }, -#endif - { "i64_to_f32", I64_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "i64_to_f64", I64_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "i64_to_extF80", I64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "i64_to_f128", I64_TO_F128, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 - { "f16_to_ui32_r_near_even", F16_TO_UI32, RNEVEN, false }, - { "f16_to_ui32_r_minMag", F16_TO_UI32, RMINM, false }, - { "f16_to_ui32_r_min", F16_TO_UI32, RMIN, false }, - { "f16_to_ui32_r_max", F16_TO_UI32, RMAX, false }, - { "f16_to_ui32_r_near_maxMag", F16_TO_UI32, RNMAXM, false }, - { "f16_to_ui64_r_near_even", F16_TO_UI64, RNEVEN, false }, - { "f16_to_ui64_r_minMag", F16_TO_UI64, RMINM, false }, - { "f16_to_ui64_r_min", F16_TO_UI64, RMIN, false }, - { "f16_to_ui64_r_max", F16_TO_UI64, RMAX, false }, - { "f16_to_ui64_r_near_maxMag", F16_TO_UI64, RNMAXM, false }, - { "f16_to_i32_r_near_even", F16_TO_I32, RNEVEN, false }, - { "f16_to_i32_r_minMag", F16_TO_I32, RMINM, false }, - { "f16_to_i32_r_min", F16_TO_I32, RMIN, false }, - { "f16_to_i32_r_max", F16_TO_I32, RMAX, false }, - { "f16_to_i32_r_near_maxMag", F16_TO_I32, RNMAXM, false }, - { "f16_to_i64_r_near_even", F16_TO_I64, RNEVEN, false }, - { "f16_to_i64_r_minMag", F16_TO_I64, RMINM, false }, - { "f16_to_i64_r_min", F16_TO_I64, RMIN, false }, - { "f16_to_i64_r_max", F16_TO_I64, RMAX, false }, - { "f16_to_i64_r_near_maxMag", F16_TO_I64, RNMAXM, false }, - { "f16_to_ui32_rx_near_even", F16_TO_UI32, RNEVEN, true }, - { "f16_to_ui32_rx_minMag", F16_TO_UI32, RMINM, true }, - { "f16_to_ui32_rx_min", F16_TO_UI32, RMIN, true }, - { "f16_to_ui32_rx_max", F16_TO_UI32, RMAX, true }, - { "f16_to_ui32_rx_near_maxMag", F16_TO_UI32, RNMAXM, true }, - { "f16_to_ui64_rx_near_even", F16_TO_UI64, RNEVEN, true }, - { "f16_to_ui64_rx_minMag", F16_TO_UI64, RMINM, true }, - { "f16_to_ui64_rx_min", F16_TO_UI64, RMIN, true }, - { "f16_to_ui64_rx_max", F16_TO_UI64, RMAX, true }, - { "f16_to_ui64_rx_near_maxMag", F16_TO_UI64, RNMAXM, true }, - { "f16_to_i32_rx_near_even", F16_TO_I32, RNEVEN, true }, - { "f16_to_i32_rx_minMag", F16_TO_I32, RMINM, true }, - { "f16_to_i32_rx_min", F16_TO_I32, RMIN, true }, - { "f16_to_i32_rx_max", F16_TO_I32, RMAX, true }, - { "f16_to_i32_rx_near_maxMag", F16_TO_I32, RNMAXM, true }, - { "f16_to_i64_rx_near_even", F16_TO_I64, RNEVEN, true }, - { "f16_to_i64_rx_minMag", F16_TO_I64, RMINM, true }, - { "f16_to_i64_rx_min", F16_TO_I64, RMIN, true }, - { "f16_to_i64_rx_max", F16_TO_I64, RMAX, true }, - { "f16_to_i64_rx_near_maxMag", F16_TO_I64, RNMAXM, true }, - { "f16_to_f32", F16_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "f16_to_f64", F16_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f16_to_extF80", F16_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f16_to_f128", F16_TO_F128, 0, 0 }, -#endif - { "f16_roundToInt_r_near_even", F16_ROUNDTOINT, RNEVEN, false }, - { "f16_roundToInt_r_minMag", F16_ROUNDTOINT, RMINM, false }, - { "f16_roundToInt_r_min", F16_ROUNDTOINT, RMIN, false }, - { "f16_roundToInt_r_max", F16_ROUNDTOINT, RMAX, false }, - { "f16_roundToInt_r_near_maxMag", F16_ROUNDTOINT, RNMAXM, false }, - { "f16_roundToInt_x", F16_ROUNDTOINT, 0, true }, - { "f16_add", F16_ADD, 0, 0 }, - { "f16_sub", F16_SUB, 0, 0 }, - { "f16_mul", F16_MUL, 0, 0 }, - { "f16_mulAdd", F16_MULADD, 0, 0 }, - { "f16_div", F16_DIV, 0, 0 }, - { "f16_rem", F16_REM, 0, 0 }, - { "f16_sqrt", F16_SQRT, 0, 0 }, - { "f16_eq", F16_EQ, 0, 0 }, - { "f16_le", F16_LE, 0, 0 }, - { "f16_lt", F16_LT, 0, 0 }, - { "f16_eq_signaling", F16_EQ_SIGNALING, 0, 0 }, - { "f16_le_quiet", F16_LE_QUIET, 0, 0 }, - { "f16_lt_quiet", F16_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { "f32_to_ui32_r_near_even", F32_TO_UI32, RNEVEN, false }, - { "f32_to_ui32_r_minMag", F32_TO_UI32, RMINM, false }, - { "f32_to_ui32_r_min", F32_TO_UI32, RMIN, false }, - { "f32_to_ui32_r_max", F32_TO_UI32, RMAX, false }, - { "f32_to_ui32_r_near_maxMag", F32_TO_UI32, RNMAXM, false }, - { "f32_to_ui64_r_near_even", F32_TO_UI64, RNEVEN, false }, - { "f32_to_ui64_r_minMag", F32_TO_UI64, RMINM, false }, - { "f32_to_ui64_r_min", F32_TO_UI64, RMIN, false }, - { "f32_to_ui64_r_max", F32_TO_UI64, RMAX, false }, - { "f32_to_ui64_r_near_maxMag", F32_TO_UI64, RNMAXM, false }, - { "f32_to_i32_r_near_even", F32_TO_I32, RNEVEN, false }, - { "f32_to_i32_r_minMag", F32_TO_I32, RMINM, false }, - { "f32_to_i32_r_min", F32_TO_I32, RMIN, false }, - { "f32_to_i32_r_max", F32_TO_I32, RMAX, false }, - { "f32_to_i32_r_near_maxMag", F32_TO_I32, RNMAXM, false }, - { "f32_to_i64_r_near_even", F32_TO_I64, RNEVEN, false }, - { "f32_to_i64_r_minMag", F32_TO_I64, RMINM, false }, - { "f32_to_i64_r_min", F32_TO_I64, RMIN, false }, - { "f32_to_i64_r_max", F32_TO_I64, RMAX, false }, - { "f32_to_i64_r_near_maxMag", F32_TO_I64, RNMAXM, false }, - { "f32_to_ui32_rx_near_even", F32_TO_UI32, RNEVEN, true }, - { "f32_to_ui32_rx_minMag", F32_TO_UI32, RMINM, true }, - { "f32_to_ui32_rx_min", F32_TO_UI32, RMIN, true }, - { "f32_to_ui32_rx_max", F32_TO_UI32, RMAX, true }, - { "f32_to_ui32_rx_near_maxMag", F32_TO_UI32, RNMAXM, true }, - { "f32_to_ui64_rx_near_even", F32_TO_UI64, RNEVEN, true }, - { "f32_to_ui64_rx_minMag", F32_TO_UI64, RMINM, true }, - { "f32_to_ui64_rx_min", F32_TO_UI64, RMIN, true }, - { "f32_to_ui64_rx_max", F32_TO_UI64, RMAX, true }, - { "f32_to_ui64_rx_near_maxMag", F32_TO_UI64, RNMAXM, true }, - { "f32_to_i32_rx_near_even", F32_TO_I32, RNEVEN, true }, - { "f32_to_i32_rx_minMag", F32_TO_I32, RMINM, true }, - { "f32_to_i32_rx_min", F32_TO_I32, RMIN, true }, - { "f32_to_i32_rx_max", F32_TO_I32, RMAX, true }, - { "f32_to_i32_rx_near_maxMag", F32_TO_I32, RNMAXM, true }, - { "f32_to_i64_rx_near_even", F32_TO_I64, RNEVEN, true }, - { "f32_to_i64_rx_minMag", F32_TO_I64, RMINM, true }, - { "f32_to_i64_rx_min", F32_TO_I64, RMIN, true }, - { "f32_to_i64_rx_max", F32_TO_I64, RMAX, true }, - { "f32_to_i64_rx_near_maxMag", F32_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f32_to_f16", F32_TO_F16, 0, 0 }, -#endif -#ifdef FLOAT64 - { "f32_to_f64", F32_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f32_to_extF80", F32_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f32_to_f128", F32_TO_F128, 0, 0 }, -#endif - { "f32_roundToInt_r_near_even", F32_ROUNDTOINT, RNEVEN, false }, - { "f32_roundToInt_r_minMag", F32_ROUNDTOINT, RMINM, false }, - { "f32_roundToInt_r_min", F32_ROUNDTOINT, RMIN, false }, - { "f32_roundToInt_r_max", F32_ROUNDTOINT, RMAX, false }, - { "f32_roundToInt_r_near_maxMag", F32_ROUNDTOINT, RNMAXM, false }, - { "f32_roundToInt_x", F32_ROUNDTOINT, 0, true }, - { "f32_add", F32_ADD, 0, 0 }, - { "f32_sub", F32_SUB, 0, 0 }, - { "f32_mul", F32_MUL, 0, 0 }, - { "f32_mulAdd", F32_MULADD, 0, 0 }, - { "f32_div", F32_DIV, 0, 0 }, - { "f32_rem", F32_REM, 0, 0 }, - { "f32_sqrt", F32_SQRT, 0, 0 }, - { "f32_eq", F32_EQ, 0, 0 }, - { "f32_le", F32_LE, 0, 0 }, - { "f32_lt", F32_LT, 0, 0 }, - { "f32_eq_signaling", F32_EQ_SIGNALING, 0, 0 }, - { "f32_le_quiet", F32_LE_QUIET, 0, 0 }, - { "f32_lt_quiet", F32_LT_QUIET, 0, 0 }, - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 - { "f64_to_ui32_r_near_even", F64_TO_UI32, RNEVEN, false }, - { "f64_to_ui32_r_minMag", F64_TO_UI32, RMINM, false }, - { "f64_to_ui32_r_min", F64_TO_UI32, RMIN, false }, - { "f64_to_ui32_r_max", F64_TO_UI32, RMAX, false }, - { "f64_to_ui32_r_near_maxMag", F64_TO_UI32, RNMAXM, false }, - { "f64_to_ui64_r_near_even", F64_TO_UI64, RNEVEN, false }, - { "f64_to_ui64_r_minMag", F64_TO_UI64, RMINM, false }, - { "f64_to_ui64_r_min", F64_TO_UI64, RMIN, false }, - { "f64_to_ui64_r_max", F64_TO_UI64, RMAX, false }, - { "f64_to_ui64_r_near_maxMag", F64_TO_UI64, RNMAXM, false }, - { "f64_to_i32_r_near_even", F64_TO_I32, RNEVEN, false }, - { "f64_to_i32_r_minMag", F64_TO_I32, RMINM, false }, - { "f64_to_i32_r_min", F64_TO_I32, RMIN, false }, - { "f64_to_i32_r_max", F64_TO_I32, RMAX, false }, - { "f64_to_i32_r_near_maxMag", F64_TO_I32, RNMAXM, false }, - { "f64_to_i64_r_near_even", F64_TO_I64, RNEVEN, false }, - { "f64_to_i64_r_minMag", F64_TO_I64, RMINM, false }, - { "f64_to_i64_r_min", F64_TO_I64, RMIN, false }, - { "f64_to_i64_r_max", F64_TO_I64, RMAX, false }, - { "f64_to_i64_r_near_maxMag", F64_TO_I64, RNMAXM, false }, - { "f64_to_ui32_rx_near_even", F64_TO_UI32, RNEVEN, true }, - { "f64_to_ui32_rx_minMag", F64_TO_UI32, RMINM, true }, - { "f64_to_ui32_rx_min", F64_TO_UI32, RMIN, true }, - { "f64_to_ui32_rx_max", F64_TO_UI32, RMAX, true }, - { "f64_to_ui32_rx_near_maxMag", F64_TO_UI32, RNMAXM, true }, - { "f64_to_ui64_rx_near_even", F64_TO_UI64, RNEVEN, true }, - { "f64_to_ui64_rx_minMag", F64_TO_UI64, RMINM, true }, - { "f64_to_ui64_rx_min", F64_TO_UI64, RMIN, true }, - { "f64_to_ui64_rx_max", F64_TO_UI64, RMAX, true }, - { "f64_to_ui64_rx_near_maxMag", F64_TO_UI64, RNMAXM, true }, - { "f64_to_i32_rx_near_even", F64_TO_I32, RNEVEN, true }, - { "f64_to_i32_rx_minMag", F64_TO_I32, RMINM, true }, - { "f64_to_i32_rx_min", F64_TO_I32, RMIN, true }, - { "f64_to_i32_rx_max", F64_TO_I32, RMAX, true }, - { "f64_to_i32_rx_near_maxMag", F64_TO_I32, RNMAXM, true }, - { "f64_to_i64_rx_near_even", F64_TO_I64, RNEVEN, true }, - { "f64_to_i64_rx_minMag", F64_TO_I64, RMINM, true }, - { "f64_to_i64_rx_min", F64_TO_I64, RMIN, true }, - { "f64_to_i64_rx_max", F64_TO_I64, RMAX, true }, - { "f64_to_i64_rx_near_maxMag", F64_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f64_to_f16", F64_TO_F16, 0, 0 }, -#endif - { "f64_to_f32", F64_TO_F32, 0, 0 }, -#ifdef EXTFLOAT80 - { "f64_to_extF80", F64_TO_EXTF80, 0, 0 }, -#endif -#ifdef FLOAT128 - { "f64_to_f128", F64_TO_F128, 0, 0 }, -#endif - { "f64_roundToInt_r_near_even", F64_ROUNDTOINT, RNEVEN, false }, - { "f64_roundToInt_r_minMag", F64_ROUNDTOINT, RMINM, false }, - { "f64_roundToInt_r_min", F64_ROUNDTOINT, RMIN, false }, - { "f64_roundToInt_r_max", F64_ROUNDTOINT, RMAX, false }, - { "f64_roundToInt_r_near_maxMag", F64_ROUNDTOINT, RNMAXM, false }, - { "f64_roundToInt_x", F64_ROUNDTOINT, 0, true }, - { "f64_add", F64_ADD, 0, 0 }, - { "f64_sub", F64_SUB, 0, 0 }, - { "f64_mul", F64_MUL, 0, 0 }, - { "f64_mulAdd", F64_MULADD, 0, 0 }, - { "f64_div", F64_DIV, 0, 0 }, - { "f64_rem", F64_REM, 0, 0 }, - { "f64_sqrt", F64_SQRT, 0, 0 }, - { "f64_eq", F64_EQ, 0, 0 }, - { "f64_le", F64_LE, 0, 0 }, - { "f64_lt", F64_LT, 0, 0 }, - { "f64_eq_signaling", F64_EQ_SIGNALING, 0, 0 }, - { "f64_le_quiet", F64_LE_QUIET, 0, 0 }, - { "f64_lt_quiet", F64_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - { "extF80_to_ui32_r_near_even", EXTF80_TO_UI32, RNEVEN, false }, - { "extF80_to_ui32_r_minMag", EXTF80_TO_UI32, RMINM, false }, - { "extF80_to_ui32_r_min", EXTF80_TO_UI32, RMIN, false }, - { "extF80_to_ui32_r_max", EXTF80_TO_UI32, RMAX, false }, - { "extF80_to_ui32_r_near_maxMag", EXTF80_TO_UI32, RNMAXM, false }, - { "extF80_to_ui64_r_near_even", EXTF80_TO_UI64, RNEVEN, false }, - { "extF80_to_ui64_r_minMag", EXTF80_TO_UI64, RMINM, false }, - { "extF80_to_ui64_r_min", EXTF80_TO_UI64, RMIN, false }, - { "extF80_to_ui64_r_max", EXTF80_TO_UI64, RMAX, false }, - { "extF80_to_ui64_r_near_maxMag", EXTF80_TO_UI64, RNMAXM, false }, - { "extF80_to_i32_r_near_even", EXTF80_TO_I32, RNEVEN, false }, - { "extF80_to_i32_r_minMag", EXTF80_TO_I32, RMINM, false }, - { "extF80_to_i32_r_min", EXTF80_TO_I32, RMIN, false }, - { "extF80_to_i32_r_max", EXTF80_TO_I32, RMAX, false }, - { "extF80_to_i32_r_near_maxMag", EXTF80_TO_I32, RNMAXM, false }, - { "extF80_to_i64_r_near_even", EXTF80_TO_I64, RNEVEN, false }, - { "extF80_to_i64_r_minMag", EXTF80_TO_I64, RMINM, false }, - { "extF80_to_i64_r_min", EXTF80_TO_I64, RMIN, false }, - { "extF80_to_i64_r_max", EXTF80_TO_I64, RMAX, false }, - { "extF80_to_i64_r_near_maxMag", EXTF80_TO_I64, RNMAXM, false }, - { "extF80_to_ui32_rx_near_even", EXTF80_TO_UI32, RNEVEN, true }, - { "extF80_to_ui32_rx_minMag", EXTF80_TO_UI32, RMINM, true }, - { "extF80_to_ui32_rx_min", EXTF80_TO_UI32, RMIN, true }, - { "extF80_to_ui32_rx_max", EXTF80_TO_UI32, RMAX, true }, - { "extF80_to_ui32_rx_near_maxMag", EXTF80_TO_UI32, RNMAXM, true }, - { "extF80_to_ui64_rx_near_even", EXTF80_TO_UI64, RNEVEN, true }, - { "extF80_to_ui64_rx_minMag", EXTF80_TO_UI64, RMINM, true }, - { "extF80_to_ui64_rx_min", EXTF80_TO_UI64, RMIN, true }, - { "extF80_to_ui64_rx_max", EXTF80_TO_UI64, RMAX, true }, - { "extF80_to_ui64_rx_near_maxMag", EXTF80_TO_UI64, RNMAXM, true }, - { "extF80_to_i32_rx_near_even", EXTF80_TO_I32, RNEVEN, true }, - { "extF80_to_i32_rx_minMag", EXTF80_TO_I32, RMINM, true }, - { "extF80_to_i32_rx_min", EXTF80_TO_I32, RMIN, true }, - { "extF80_to_i32_rx_max", EXTF80_TO_I32, RMAX, true }, - { "extF80_to_i32_rx_near_maxMag", EXTF80_TO_I32, RNMAXM, true }, - { "extF80_to_i64_rx_near_even", EXTF80_TO_I64, RNEVEN, true }, - { "extF80_to_i64_rx_minMag", EXTF80_TO_I64, RMINM, true }, - { "extF80_to_i64_rx_min", EXTF80_TO_I64, RMIN, true }, - { "extF80_to_i64_rx_max", EXTF80_TO_I64, RMAX, true }, - { "extF80_to_i64_rx_near_maxMag", EXTF80_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "extF80_to_f16", EXTF80_TO_F16, 0, 0 }, -#endif - { "extF80_to_f32", EXTF80_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "extF80_to_f64", EXTF80_TO_F64, 0, 0 }, -#endif -#ifdef FLOAT128 - { "extF80_to_f128", EXTF80_TO_F128, 0, 0 }, -#endif - { "extF80_roundToInt_r_near_even", EXTF80_ROUNDTOINT, RNEVEN, false }, - { "extF80_roundToInt_r_minMag", EXTF80_ROUNDTOINT, RMINM, false }, - { "extF80_roundToInt_r_min", EXTF80_ROUNDTOINT, RMIN, false }, - { "extF80_roundToInt_r_max", EXTF80_ROUNDTOINT, RMAX, false }, - { "extF80_roundToInt_r_near_maxMag", EXTF80_ROUNDTOINT, RNMAXM, false }, - { "extF80_roundToInt_x", EXTF80_ROUNDTOINT, 0, true }, - { "extF80_add", EXTF80_ADD, 0, 0 }, - { "extF80_sub", EXTF80_SUB, 0, 0 }, - { "extF80_mul", EXTF80_MUL, 0, 0 }, - { "extF80_div", EXTF80_DIV, 0, 0 }, - { "extF80_rem", EXTF80_REM, 0, 0 }, - { "extF80_sqrt", EXTF80_SQRT, 0, 0 }, - { "extF80_eq", EXTF80_EQ, 0, 0 }, - { "extF80_le", EXTF80_LE, 0, 0 }, - { "extF80_lt", EXTF80_LT, 0, 0 }, - { "extF80_eq_signaling", EXTF80_EQ_SIGNALING, 0, 0 }, - { "extF80_le_quiet", EXTF80_LE_QUIET, 0, 0 }, - { "extF80_lt_quiet", EXTF80_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 - { "f128_to_ui32_r_near_even", F128_TO_UI32, RNEVEN, false }, - { "f128_to_ui32_r_minMag", F128_TO_UI32, RMINM, false }, - { "f128_to_ui32_r_min", F128_TO_UI32, RMIN, false }, - { "f128_to_ui32_r_max", F128_TO_UI32, RMAX, false }, - { "f128_to_ui32_r_near_maxMag", F128_TO_UI32, RNMAXM, false }, - { "f128_to_ui64_r_near_even", F128_TO_UI64, RNEVEN, false }, - { "f128_to_ui64_r_minMag", F128_TO_UI64, RMINM, false }, - { "f128_to_ui64_r_min", F128_TO_UI64, RMIN, false }, - { "f128_to_ui64_r_max", F128_TO_UI64, RMAX, false }, - { "f128_to_ui64_r_near_maxMag", F128_TO_UI64, RNMAXM, false }, - { "f128_to_i32_r_near_even", F128_TO_I32, RNEVEN, false }, - { "f128_to_i32_r_minMag", F128_TO_I32, RMINM, false }, - { "f128_to_i32_r_min", F128_TO_I32, RMIN, false }, - { "f128_to_i32_r_max", F128_TO_I32, RMAX, false }, - { "f128_to_i32_r_near_maxMag", F128_TO_I32, RNMAXM, false }, - { "f128_to_i64_r_near_even", F128_TO_I64, RNEVEN, false }, - { "f128_to_i64_r_minMag", F128_TO_I64, RMINM, false }, - { "f128_to_i64_r_min", F128_TO_I64, RMIN, false }, - { "f128_to_i64_r_max", F128_TO_I64, RMAX, false }, - { "f128_to_i64_r_near_maxMag", F128_TO_I64, RNMAXM, false }, - { "f128_to_ui32_rx_near_even", F128_TO_UI32, RNEVEN, true }, - { "f128_to_ui32_rx_minMag", F128_TO_UI32, RMINM, true }, - { "f128_to_ui32_rx_min", F128_TO_UI32, RMIN, true }, - { "f128_to_ui32_rx_max", F128_TO_UI32, RMAX, true }, - { "f128_to_ui32_rx_near_maxMag", F128_TO_UI32, RNMAXM, true }, - { "f128_to_ui64_rx_near_even", F128_TO_UI64, RNEVEN, true }, - { "f128_to_ui64_rx_minMag", F128_TO_UI64, RMINM, true }, - { "f128_to_ui64_rx_min", F128_TO_UI64, RMIN, true }, - { "f128_to_ui64_rx_max", F128_TO_UI64, RMAX, true }, - { "f128_to_ui64_rx_near_maxMag", F128_TO_UI64, RNMAXM, true }, - { "f128_to_i32_rx_near_even", F128_TO_I32, RNEVEN, true }, - { "f128_to_i32_rx_minMag", F128_TO_I32, RMINM, true }, - { "f128_to_i32_rx_min", F128_TO_I32, RMIN, true }, - { "f128_to_i32_rx_max", F128_TO_I32, RMAX, true }, - { "f128_to_i32_rx_near_maxMag", F128_TO_I32, RNMAXM, true }, - { "f128_to_i64_rx_near_even", F128_TO_I64, RNEVEN, true }, - { "f128_to_i64_rx_minMag", F128_TO_I64, RMINM, true }, - { "f128_to_i64_rx_min", F128_TO_I64, RMIN, true }, - { "f128_to_i64_rx_max", F128_TO_I64, RMAX, true }, - { "f128_to_i64_rx_near_maxMag", F128_TO_I64, RNMAXM, true }, -#ifdef FLOAT16 - { "f128_to_f16", F128_TO_F16, 0, 0 }, -#endif - { "f128_to_f32", F128_TO_F32, 0, 0 }, -#ifdef FLOAT64 - { "f128_to_f64", F128_TO_F64, 0, 0 }, -#endif -#ifdef EXTFLOAT80 - { "f128_to_extF80", F128_TO_EXTF80, 0, 0 }, -#endif - { "f128_roundToInt_r_near_even", F128_ROUNDTOINT, RNEVEN, false }, - { "f128_roundToInt_r_minMag", F128_ROUNDTOINT, RMINM, false }, - { "f128_roundToInt_r_min", F128_ROUNDTOINT, RMIN, false }, - { "f128_roundToInt_r_max", F128_ROUNDTOINT, RMAX, false }, - { "f128_roundToInt_r_near_maxMag", F128_ROUNDTOINT, RNMAXM, false }, - { "f128_roundToInt_x", F128_ROUNDTOINT, 0, true }, - { "f128_add", F128_ADD, 0, 0 }, - { "f128_sub", F128_SUB, 0, 0 }, - { "f128_mul", F128_MUL, 0, 0 }, - { "f128_mulAdd", F128_MULADD, 0, 0 }, - { "f128_div", F128_DIV, 0, 0 }, - { "f128_rem", F128_REM, 0, 0 }, - { "f128_sqrt", F128_SQRT, 0, 0 }, - { "f128_eq", F128_EQ, 0, 0 }, - { "f128_le", F128_LE, 0, 0 }, - { "f128_lt", F128_LT, 0, 0 }, - { "f128_eq_signaling", F128_EQ_SIGNALING, 0, 0 }, - { "f128_le_quiet", F128_LE_QUIET, 0, 0 }, - { "f128_lt_quiet", F128_LT_QUIET, 0, 0 }, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - { 0, 0, 0, 0 } -}; - diff --git a/addins/TestFloat-3e/source/subj-C/subjfloat.c b/addins/TestFloat-3e/source/subj-C/subjfloat.c deleted file mode 100644 index 438d0ea37..000000000 --- a/addins/TestFloat-3e/source/subj-C/subjfloat.c +++ /dev/null @@ -1,856 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "subjfloat_config.h" -#include "subjfloat.h" - -#pragma STDC FENV_ACCESS ON - -void subjfloat_setRoundingMode( uint_fast8_t roundingMode ) -{ - - fesetround( - (roundingMode == softfloat_round_near_even) ? FE_TONEAREST - : (roundingMode == softfloat_round_minMag) ? FE_TOWARDZERO - : (roundingMode == softfloat_round_min) ? FE_DOWNWARD - : FE_UPWARD - ); - -} - -void subjfloat_setExtF80RoundingPrecision( uint_fast8_t roundingPrecision ) -{ - -} - -uint_fast8_t subjfloat_clearExceptionFlags( void ) -{ - int subjExceptionFlags; - uint_fast8_t exceptionFlags; - - subjExceptionFlags = - fetestexcept( - FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT - ); - feclearexcept( - FE_INVALID | FE_DIVBYZERO | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT ); - exceptionFlags = 0; - if ( subjExceptionFlags & FE_INVALID ) { - exceptionFlags |= softfloat_flag_invalid; - } - if ( subjExceptionFlags & FE_DIVBYZERO ) { - exceptionFlags |= softfloat_flag_infinite; - } - if ( subjExceptionFlags & FE_OVERFLOW ) { - exceptionFlags |= softfloat_flag_overflow; - } - if ( subjExceptionFlags & FE_UNDERFLOW ) { - exceptionFlags |= softfloat_flag_underflow; - } - if ( subjExceptionFlags & FE_INEXACT ) { - exceptionFlags |= softfloat_flag_inexact; - } - return exceptionFlags; - -} - -union f32_f { float32_t f32; float f; }; - -float32_t subj_ui32_to_f32( uint32_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_ui64_to_f32( uint64_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_i32_to_f32( int32_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -float32_t subj_i64_to_f32( int64_t a ) -{ - union f32_f uZ; - - uZ.f = a; - return uZ.f32; - -} - -uint_fast32_t subj_f32_to_ui32_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (uint32_t) uA.f; - -} - -uint_fast64_t subj_f32_to_ui64_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (uint64_t) uA.f; - -} - -int_fast32_t subj_f32_to_i32_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (int32_t) uA.f; - -} - -int_fast64_t subj_f32_to_i64_rx_minMag( float32_t a ) -{ - union f32_f uA; - - uA.f32 = a; - return (int64_t) uA.f; - -} - -float32_t subj_f32_add( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f + uB.f; - return uZ.f32; - -} - -float32_t subj_f32_sub( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f - uB.f; - return uZ.f32; - -} - -float32_t subj_f32_mul( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f * uB.f; - return uZ.f32; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float32_t subj_f32_mulAdd( float32_t a, float32_t b, float32_t c ) -{ - union f32_f uA, uB, uC, uZ; - - uA.f32 = a; - uB.f32 = b; - uC.f32 = c; - uZ.f = fmaf( uA.f, uB.f, uC.f ); - return uZ.f32; - -} - -#endif -#endif - -float32_t subj_f32_div( float32_t a, float32_t b ) -{ - union f32_f uA, uB, uZ; - - uA.f32 = a; - uB.f32 = b; - uZ.f = uA.f / uB.f; - return uZ.f32; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float32_t subj_f32_sqrt( float32_t a ) -{ - union f32_f uA, uZ; - - uA.f32 = a; - uZ.f = sqrtf( uA.f ); - return uZ.f32; - -} - -#endif -#endif - -bool subj_f32_eq( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f == uB.f); - -} - -bool subj_f32_le( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f <= uB.f); - -} - -bool subj_f32_lt( float32_t a, float32_t b ) -{ - union f32_f uA, uB; - - uA.f32 = a; - uB.f32 = b; - return (uA.f < uB.f); - -} - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#ifdef FLOAT64 - -union f64_d { float64_t f64; double d; }; - -float64_t subj_ui32_to_f64( uint32_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_ui64_to_f64( uint64_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_i32_to_f64( int32_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_i64_to_f64( int64_t a ) -{ - union f64_d uZ; - - uZ.d = a; - return uZ.f64; - -} - -float64_t subj_f32_to_f64( float32_t a ) -{ - union f32_f uA; - union f64_d uZ; - - uA.f32 = a; - uZ.d = uA.f; - return uZ.f64; - -} - -uint_fast32_t subj_f64_to_ui32_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (uint32_t) uA.d; - -} - -uint_fast64_t subj_f64_to_ui64_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (uint64_t) uA.d; - -} - -int_fast32_t subj_f64_to_i32_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (int32_t) uA.d; - -} - -int_fast64_t subj_f64_to_i64_rx_minMag( float64_t a ) -{ - union f64_d uA; - - uA.f64 = a; - return (int64_t) uA.d; - -} - -float32_t subj_f64_to_f32( float64_t a ) -{ - union f64_d uA; - union f32_f uZ; - - uA.f64 = a; - uZ.f = uA.d; - return uZ.f32; - -} - -float64_t subj_f64_add( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d + uB.d; - return uZ.f64; - -} - -float64_t subj_f64_sub( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d - uB.d; - return uZ.f64; - -} - -float64_t subj_f64_mul( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d * uB.d; - return uZ.f64; - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -float64_t subj_f64_mulAdd( float64_t a, float64_t b, float64_t c ) -{ - union f64_d uA, uB, uC, uZ; - - uA.f64 = a; - uB.f64 = b; - uC.f64 = c; - uZ.d = fma( uA.d, uB.d, uC.d ); - return uZ.f64; - -} - -#endif -#endif - -float64_t subj_f64_div( float64_t a, float64_t b ) -{ - union f64_d uA, uB, uZ; - - uA.f64 = a; - uB.f64 = b; - uZ.d = uA.d / uB.d; - return uZ.f64; - -} - -float64_t subj_f64_sqrt( float64_t a ) -{ - union f64_d uA, uZ; - - uA.f64 = a; - uZ.d = sqrt( uA.d ); - return uZ.f64; - -} - -bool subj_f64_eq( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d == uB.d); - -} - -bool subj_f64_le( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d <= uB.d); - -} - -bool subj_f64_lt( float64_t a, float64_t b ) -{ - union f64_d uA, uB; - - uA.f64 = a; - uB.f64 = b; - return (uA.d < uB.d); - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined EXTFLOAT80 && defined LONG_DOUBLE_IS_EXTFLOAT80 - -void subj_ui32_to_extF80M( uint32_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_ui64_to_extF80M( uint64_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i32_to_extF80M( int32_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i64_to_extF80M( int64_t a, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_f32_to_extF80M( float32_t a, extFloat80_t *zPtr ) -{ - union f32_f uA; - - uA.f32 = a; - *((long double *) zPtr) = uA.f; - -} - -#ifdef FLOAT64 - -void subj_f64_to_extF80M( float64_t a, extFloat80_t *zPtr ) -{ - union f64_d uA; - - uA.f64 = a; - *((long double *) zPtr) = uA.d; - -} - -#endif - -uint_fast32_t subj_extF80M_to_ui32_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -uint_fast64_t subj_extF80M_to_ui64_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast32_t subj_extF80M_to_i32_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast64_t subj_extF80M_to_i64_rx_minMag( const extFloat80_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -float32_t subj_extF80M_to_f32( const extFloat80_t *aPtr ) -{ - union f32_f uZ; - - uZ.f = *((const long double *) aPtr); - return uZ.f32; - -} - -#ifdef FLOAT64 - -float64_t subj_extF80M_to_f64( const extFloat80_t *aPtr ) -{ - union f64_d uZ; - - uZ.d = *((const long double *) aPtr); - return uZ.f64; - -} - -#endif - -void - subj_extF80M_add( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) + *((const long double *) bPtr); - -} - -void - subj_extF80M_sub( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) - *((const long double *) bPtr); - -} - -void - subj_extF80M_mul( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) * *((const long double *) bPtr); - -} - -void - subj_extF80M_div( - const extFloat80_t *aPtr, const extFloat80_t *bPtr, extFloat80_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) / *((const long double *) bPtr); - -} - -bool subj_extF80M_eq( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) == *((const long double *) bPtr)); - -} - -bool subj_extF80M_le( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) <= *((const long double *) bPtr)); - -} - -bool subj_extF80M_lt( const extFloat80_t *aPtr, const extFloat80_t *bPtr ) -{ - - return (*((const long double *) aPtr) < *((const long double *) bPtr)); - -} - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ - -#if defined FLOAT128 && defined LONG_DOUBLE_IS_FLOAT128 - -void subj_ui32_to_f128M( uint32_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_ui64_to_f128M( uint64_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i32_to_f128M( int32_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_i64_to_f128M( int64_t a, float128_t *zPtr ) -{ - - *((long double *) zPtr) = a; - -} - -void subj_f32_to_f128M( float32_t a, float128_t *zPtr ) -{ - union f32_f uA; - - uA.f32 = a; - *((long double *) zPtr) = uA.f; - -} - -#ifdef FLOAT64 - -void subj_f64_to_f128M( float64_t a, float128_t *zPtr ) -{ - union f64_d uA; - - uA.f64 = a; - *((long double *) zPtr) = uA.d; - -} - -#endif - -uint_fast32_t subj_f128M_to_ui32_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -uint_fast64_t subj_f128M_to_ui64_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast32_t subj_f128M_to_i32_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -int_fast64_t subj_f128M_to_i64_rx_minMag( const float128_t *aPtr ) -{ - - return *((const long double *) aPtr); - -} - -float32_t subj_f128M_to_f32( const float128_t *aPtr ) -{ - union f32_f uZ; - - uZ.f = *((const long double *) aPtr); - return uZ.f32; - -} - -#ifdef FLOAT64 - -float64_t subj_f128M_to_f64( const float128_t *aPtr ) -{ - union f64_d uZ; - - uZ.d = *((const long double *) aPtr); - return uZ.f64; - -} - -#endif - -void - subj_f128M_add( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) + *((const long double *) bPtr); - -} - -void - subj_f128M_sub( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) - *((const long double *) bPtr); - -} - -void - subj_f128M_mul( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) * *((const long double *) bPtr); - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -void - subj_f128M_mulAdd( - const float128_t *aPtr, - const float128_t *bPtr, - const float128_t *cPtr, - float128_t *zPtr - ) -{ - - *((long double *) zPtr) = - fmal( - *((const long double *) aPtr), - *((const long double *) bPtr), - *((const long double *) cPtr) - ); - -} - -#endif -#endif - -void - subj_f128M_div( - const float128_t *aPtr, const float128_t *bPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = - *((const long double *) aPtr) / *((const long double *) bPtr); - -} - -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ - -void subj_f128M_sqrt( const float128_t *aPtr, float128_t *zPtr ) -{ - - *((long double *) zPtr) = sqrtl( *((const long double *) aPtr) ); - -} - -#endif -#endif - -bool subj_f128M_eq( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) == *((const long double *) bPtr)); - -} - -bool subj_f128M_le( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) <= *((const long double *) bPtr)); - -} - -bool subj_f128M_lt( const float128_t *aPtr, const float128_t *bPtr ) -{ - - return (*((const long double *) aPtr) < *((const long double *) bPtr)); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/subj-C/subjfloat_config.h b/addins/TestFloat-3e/source/subj-C/subjfloat_config.h deleted file mode 100644 index 01387e6d1..000000000 --- a/addins/TestFloat-3e/source/subj-C/subjfloat_config.h +++ /dev/null @@ -1,133 +0,0 @@ - -/*---------------------------------------------------------------------------- -| The following macros are defined to indicate all the subject functions that -| exist. -*----------------------------------------------------------------------------*/ - -#define SUBJ_UI32_TO_F32 -#define SUBJ_UI64_TO_F32 -#define SUBJ_I32_TO_F32 -#define SUBJ_I64_TO_F32 - -#define SUBJ_F32_TO_UI32_RX_MINMAG -#define SUBJ_F32_TO_UI64_RX_MINMAG -#define SUBJ_F32_TO_I32_RX_MINMAG -#define SUBJ_F32_TO_I64_RX_MINMAG -#define SUBJ_F32_ADD -#define SUBJ_F32_SUB -#define SUBJ_F32_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F32_MULADD -#endif -#endif -#define SUBJ_F32_DIV -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F32_SQRT -#endif -#endif -#define SUBJ_F32_EQ -#define SUBJ_F32_LE -#define SUBJ_F32_LT - -#ifdef FLOAT64 - -#define SUBJ_UI32_TO_F64 -#define SUBJ_UI64_TO_F64 -#define SUBJ_I32_TO_F64 -#define SUBJ_I64_TO_F64 - -#define SUBJ_F32_TO_F64 - -#define SUBJ_F64_TO_UI32_RX_MINMAG -#define SUBJ_F64_TO_UI64_RX_MINMAG -#define SUBJ_F64_TO_I32_RX_MINMAG -#define SUBJ_F64_TO_I64_RX_MINMAG -#define SUBJ_F64_TO_F32 -#define SUBJ_F64_ADD -#define SUBJ_F64_SUB -#define SUBJ_F64_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F64_MULADD -#endif -#endif -#define SUBJ_F64_DIV -#define SUBJ_F64_SQRT -#define SUBJ_F64_EQ -#define SUBJ_F64_LE -#define SUBJ_F64_LT - -#endif - -#if defined EXTFLOAT80 && defined LONG_DOUBLE_IS_EXTFLOAT80 - -#define SUBJ_UI32_TO_EXTF80 -#define SUBJ_UI64_TO_EXTF80 -#define SUBJ_I32_TO_EXTF80 -#define SUBJ_I64_TO_EXTF80 - -#define SUBJ_F32_TO_EXTF80 -#ifdef FLOAT64 -#define SUBJ_F64_TO_EXTF80 -#endif - -#define SUBJ_EXTF80_TO_UI32_RX_MINMAG -#define SUBJ_EXTF80_TO_UI64_RX_MINMAG -#define SUBJ_EXTF80_TO_I32_RX_MINMAG -#define SUBJ_EXTF80_TO_I64_RX_MINMAG -#define SUBJ_EXTF80_TO_F32 -#ifdef FLOAT64 -#define SUBJ_EXTF80_TO_F64 -#endif -#define SUBJ_EXTF80_ADD -#define SUBJ_EXTF80_SUB -#define SUBJ_EXTF80_MUL -#define SUBJ_EXTF80_DIV -#define SUBJ_EXTF80_EQ -#define SUBJ_EXTF80_LE -#define SUBJ_EXTF80_LT - -#endif - -#if defined FLOAT128 && defined LONG_DOUBLE_IS_FLOAT128 - -#define SUBJ_UI32_TO_F128 -#define SUBJ_UI64_TO_F128 -#define SUBJ_I32_TO_F128 -#define SUBJ_I64_TO_F128 - -#define SUBJ_F32_TO_F128 -#ifdef FLOAT64 -#define SUBJ_F64_TO_F128 -#endif - -#define SUBJ_F128_TO_UI32_RX_MINMAG -#define SUBJ_F128_TO_UI64_RX_MINMAG -#define SUBJ_F128_TO_I32_RX_MINMAG -#define SUBJ_F128_TO_I64_RX_MINMAG -#define SUBJ_F128_TO_F32 -#ifdef FLOAT64 -#define SUBJ_F128_TO_F64 -#endif -#define SUBJ_F128_ADD -#define SUBJ_F128_SUB -#define SUBJ_F128_MUL -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F128_MULADD -#endif -#endif -#define SUBJ_F128_DIV -#ifdef __STDC_VERSION__ -#if 199901L <= __STDC_VERSION__ -#define SUBJ_F128_SQRT -#endif -#endif -#define SUBJ_F128_EQ -#define SUBJ_F128_LE -#define SUBJ_F128_LT - -#endif - diff --git a/addins/TestFloat-3e/source/subjfloat.h b/addins/TestFloat-3e/source/subjfloat.h deleted file mode 100644 index 43076deee..000000000 --- a/addins/TestFloat-3e/source/subjfloat.h +++ /dev/null @@ -1,516 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "softfloat.h" - -extern void (*const subjfloat_functions[])(); - -void subjfloat_setRoundingMode( uint_fast8_t ); -void subjfloat_setExtF80RoundingPrecision( uint_fast8_t ); -uint_fast8_t subjfloat_clearExceptionFlags( void ); - -/*---------------------------------------------------------------------------- -| Subject function declarations. (Many of these functions may not exist.) -| WARNING: -| This file should not normally be modified. Use "subjfloat_config.h" to -| specify which of these functions actually exist. -*----------------------------------------------------------------------------*/ - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -float16_t subj_ui32_to_f16( uint32_t ); -#endif -float32_t subj_ui32_to_f32( uint32_t ); -#ifdef FLOAT64 -float64_t subj_ui32_to_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_ui32_to_extF80M( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_ui32_to_f128M( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_ui64_to_f16( uint64_t ); -#endif -float32_t subj_ui64_to_f32( uint64_t ); -#ifdef FLOAT64 -float64_t subj_ui64_to_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -void subj_ui64_to_extF80M( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_ui64_to_f128M( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_i32_to_f16( int32_t ); -#endif -float32_t subj_i32_to_f32( int32_t ); -#ifdef FLOAT64 -float64_t subj_i32_to_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_i32_to_extF80M( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_i32_to_f128M( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -float16_t subj_i64_to_f16( int64_t ); -#endif -float32_t subj_i64_to_f32( int64_t ); -#ifdef FLOAT64 -float64_t subj_i64_to_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -void subj_i64_to_extF80M( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_i64_to_f128M( int64_t, float128_t * ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 - -uint_fast32_t subj_f16_to_ui32_r_near_even( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_minMag( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_min( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_max( float16_t ); -uint_fast32_t subj_f16_to_ui32_r_near_maxMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_near_even( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_minMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_min( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_max( float16_t ); -uint_fast64_t subj_f16_to_ui64_r_near_maxMag( float16_t ); -int_fast32_t subj_f16_to_i32_r_near_even( float16_t ); -int_fast32_t subj_f16_to_i32_r_minMag( float16_t ); -int_fast32_t subj_f16_to_i32_r_min( float16_t ); -int_fast32_t subj_f16_to_i32_r_max( float16_t ); -int_fast32_t subj_f16_to_i32_r_near_maxMag( float16_t ); -int_fast64_t subj_f16_to_i64_r_near_even( float16_t ); -int_fast64_t subj_f16_to_i64_r_minMag( float16_t ); -int_fast64_t subj_f16_to_i64_r_min( float16_t ); -int_fast64_t subj_f16_to_i64_r_max( float16_t ); -int_fast64_t subj_f16_to_i64_r_near_maxMag( float16_t ); - -uint_fast32_t subj_f16_to_ui32_rx_near_even( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_minMag( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_min( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_max( float16_t ); -uint_fast32_t subj_f16_to_ui32_rx_near_maxMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_near_even( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_minMag( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_min( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_max( float16_t ); -uint_fast64_t subj_f16_to_ui64_rx_near_maxMag( float16_t ); -int_fast32_t subj_f16_to_i32_rx_near_even( float16_t ); -int_fast32_t subj_f16_to_i32_rx_minMag( float16_t ); -int_fast32_t subj_f16_to_i32_rx_min( float16_t ); -int_fast32_t subj_f16_to_i32_rx_max( float16_t ); -int_fast32_t subj_f16_to_i32_rx_near_maxMag( float16_t ); -int_fast64_t subj_f16_to_i64_rx_near_even( float16_t ); -int_fast64_t subj_f16_to_i64_rx_minMag( float16_t ); -int_fast64_t subj_f16_to_i64_rx_min( float16_t ); -int_fast64_t subj_f16_to_i64_rx_max( float16_t ); -int_fast64_t subj_f16_to_i64_rx_near_maxMag( float16_t ); - -float32_t subj_f16_to_f32( float16_t ); -#ifdef FLOAT64 -float64_t subj_f16_to_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -void subj_f16_to_extF80M( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f16_to_f128M( float16_t, float128_t * ); -#endif - -float16_t subj_f16_roundToInt_r_near_even( float16_t ); -float16_t subj_f16_roundToInt_r_minMag( float16_t ); -float16_t subj_f16_roundToInt_r_min( float16_t ); -float16_t subj_f16_roundToInt_r_max( float16_t ); -float16_t subj_f16_roundToInt_r_near_maxMag( float16_t ); -float16_t subj_f16_roundToInt_x( float16_t ); -float16_t subj_f16_add( float16_t, float16_t ); -float16_t subj_f16_sub( float16_t, float16_t ); -float16_t subj_f16_mul( float16_t, float16_t ); -float16_t subj_f16_mulAdd( float16_t, float16_t, float16_t ); -float16_t subj_f16_div( float16_t, float16_t ); -float16_t subj_f16_rem( float16_t, float16_t ); -float16_t subj_f16_sqrt( float16_t ); -bool subj_f16_eq( float16_t, float16_t ); -bool subj_f16_le( float16_t, float16_t ); -bool subj_f16_lt( float16_t, float16_t ); -bool subj_f16_eq_signaling( float16_t, float16_t ); -bool subj_f16_le_quiet( float16_t, float16_t ); -bool subj_f16_lt_quiet( float16_t, float16_t ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -uint_fast32_t subj_f32_to_ui32_r_near_even( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_minMag( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_min( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_max( float32_t ); -uint_fast32_t subj_f32_to_ui32_r_near_maxMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_near_even( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_minMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_min( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_max( float32_t ); -uint_fast64_t subj_f32_to_ui64_r_near_maxMag( float32_t ); -int_fast32_t subj_f32_to_i32_r_near_even( float32_t ); -int_fast32_t subj_f32_to_i32_r_minMag( float32_t ); -int_fast32_t subj_f32_to_i32_r_min( float32_t ); -int_fast32_t subj_f32_to_i32_r_max( float32_t ); -int_fast32_t subj_f32_to_i32_r_near_maxMag( float32_t ); -int_fast64_t subj_f32_to_i64_r_near_even( float32_t ); -int_fast64_t subj_f32_to_i64_r_minMag( float32_t ); -int_fast64_t subj_f32_to_i64_r_min( float32_t ); -int_fast64_t subj_f32_to_i64_r_max( float32_t ); -int_fast64_t subj_f32_to_i64_r_near_maxMag( float32_t ); - -uint_fast32_t subj_f32_to_ui32_rx_near_even( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_minMag( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_min( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_max( float32_t ); -uint_fast32_t subj_f32_to_ui32_rx_near_maxMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_near_even( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_minMag( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_min( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_max( float32_t ); -uint_fast64_t subj_f32_to_ui64_rx_near_maxMag( float32_t ); -int_fast32_t subj_f32_to_i32_rx_near_even( float32_t ); -int_fast32_t subj_f32_to_i32_rx_minMag( float32_t ); -int_fast32_t subj_f32_to_i32_rx_min( float32_t ); -int_fast32_t subj_f32_to_i32_rx_max( float32_t ); -int_fast32_t subj_f32_to_i32_rx_near_maxMag( float32_t ); -int_fast64_t subj_f32_to_i64_rx_near_even( float32_t ); -int_fast64_t subj_f32_to_i64_rx_minMag( float32_t ); -int_fast64_t subj_f32_to_i64_rx_min( float32_t ); -int_fast64_t subj_f32_to_i64_rx_max( float32_t ); -int_fast64_t subj_f32_to_i64_rx_near_maxMag( float32_t ); - -#ifdef FLOAT16 -float16_t subj_f32_to_f16( float32_t ); -#endif -#ifdef FLOAT64 -float64_t subj_f32_to_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -void subj_f32_to_extF80M( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f32_to_f128M( float32_t, float128_t * ); -#endif - -float32_t subj_f32_roundToInt_r_near_even( float32_t ); -float32_t subj_f32_roundToInt_r_minMag( float32_t ); -float32_t subj_f32_roundToInt_r_min( float32_t ); -float32_t subj_f32_roundToInt_r_max( float32_t ); -float32_t subj_f32_roundToInt_r_near_maxMag( float32_t ); -float32_t subj_f32_roundToInt_x( float32_t ); -float32_t subj_f32_add( float32_t, float32_t ); -float32_t subj_f32_sub( float32_t, float32_t ); -float32_t subj_f32_mul( float32_t, float32_t ); -float32_t subj_f32_mulAdd( float32_t, float32_t, float32_t ); -float32_t subj_f32_div( float32_t, float32_t ); -float32_t subj_f32_rem( float32_t, float32_t ); -float32_t subj_f32_sqrt( float32_t ); -bool subj_f32_eq( float32_t, float32_t ); -bool subj_f32_le( float32_t, float32_t ); -bool subj_f32_lt( float32_t, float32_t ); -bool subj_f32_eq_signaling( float32_t, float32_t ); -bool subj_f32_le_quiet( float32_t, float32_t ); -bool subj_f32_lt_quiet( float32_t, float32_t ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT64 - -uint_fast32_t subj_f64_to_ui32_r_near_even( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_minMag( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_min( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_max( float64_t ); -uint_fast32_t subj_f64_to_ui32_r_near_maxMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_near_even( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_minMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_min( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_max( float64_t ); -uint_fast64_t subj_f64_to_ui64_r_near_maxMag( float64_t ); -int_fast32_t subj_f64_to_i32_r_near_even( float64_t ); -int_fast32_t subj_f64_to_i32_r_minMag( float64_t ); -int_fast32_t subj_f64_to_i32_r_min( float64_t ); -int_fast32_t subj_f64_to_i32_r_max( float64_t ); -int_fast32_t subj_f64_to_i32_r_near_maxMag( float64_t ); -int_fast64_t subj_f64_to_i64_r_near_even( float64_t ); -int_fast64_t subj_f64_to_i64_r_minMag( float64_t ); -int_fast64_t subj_f64_to_i64_r_min( float64_t ); -int_fast64_t subj_f64_to_i64_r_max( float64_t ); -int_fast64_t subj_f64_to_i64_r_near_maxMag( float64_t ); - -uint_fast32_t subj_f64_to_ui32_rx_near_even( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_minMag( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_min( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_max( float64_t ); -uint_fast32_t subj_f64_to_ui32_rx_near_maxMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_near_even( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_minMag( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_min( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_max( float64_t ); -uint_fast64_t subj_f64_to_ui64_rx_near_maxMag( float64_t ); -int_fast32_t subj_f64_to_i32_rx_near_even( float64_t ); -int_fast32_t subj_f64_to_i32_rx_minMag( float64_t ); -int_fast32_t subj_f64_to_i32_rx_min( float64_t ); -int_fast32_t subj_f64_to_i32_rx_max( float64_t ); -int_fast32_t subj_f64_to_i32_rx_near_maxMag( float64_t ); -int_fast64_t subj_f64_to_i64_rx_near_even( float64_t ); -int_fast64_t subj_f64_to_i64_rx_minMag( float64_t ); -int_fast64_t subj_f64_to_i64_rx_min( float64_t ); -int_fast64_t subj_f64_to_i64_rx_max( float64_t ); -int_fast64_t subj_f64_to_i64_rx_near_maxMag( float64_t ); - -#ifdef FLOAT16 -float16_t subj_f64_to_f16( float64_t ); -#endif -float32_t subj_f64_to_f32( float64_t ); -#ifdef EXTFLOAT80 -void subj_f64_to_extF80M( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -void subj_f64_to_f128M( float64_t, float128_t * ); -#endif - -float64_t subj_f64_roundToInt_r_near_even( float64_t ); -float64_t subj_f64_roundToInt_r_minMag( float64_t ); -float64_t subj_f64_roundToInt_r_min( float64_t ); -float64_t subj_f64_roundToInt_r_max( float64_t ); -float64_t subj_f64_roundToInt_r_near_maxMag( float64_t ); -float64_t subj_f64_roundToInt_x( float64_t ); -float64_t subj_f64_add( float64_t, float64_t ); -float64_t subj_f64_sub( float64_t, float64_t ); -float64_t subj_f64_mul( float64_t, float64_t ); -float64_t subj_f64_mulAdd( float64_t, float64_t, float64_t ); -float64_t subj_f64_div( float64_t, float64_t ); -float64_t subj_f64_rem( float64_t, float64_t ); -float64_t subj_f64_sqrt( float64_t ); -bool subj_f64_eq( float64_t, float64_t ); -bool subj_f64_le( float64_t, float64_t ); -bool subj_f64_lt( float64_t, float64_t ); -bool subj_f64_eq_signaling( float64_t, float64_t ); -bool subj_f64_le_quiet( float64_t, float64_t ); -bool subj_f64_lt_quiet( float64_t, float64_t ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - -uint_fast32_t subj_extF80M_to_ui32_r_near_even( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_minMag( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_min( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_max( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_r_near_maxMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_near_even( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_minMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_min( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_max( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_r_near_maxMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_near_even( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_minMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_min( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_max( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_r_near_maxMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_near_even( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_minMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_min( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_max( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_r_near_maxMag( const extFloat80_t * ); - -uint_fast32_t subj_extF80M_to_ui32_rx_near_even( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_minMag( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_min( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_max( const extFloat80_t * ); -uint_fast32_t subj_extF80M_to_ui32_rx_near_maxMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_near_even( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_minMag( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_min( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_max( const extFloat80_t * ); -uint_fast64_t subj_extF80M_to_ui64_rx_near_maxMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_near_even( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_minMag( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_min( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_max( const extFloat80_t * ); -int_fast32_t subj_extF80M_to_i32_rx_near_maxMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_near_even( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_minMag( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_min( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_max( const extFloat80_t * ); -int_fast64_t subj_extF80M_to_i64_rx_near_maxMag( const extFloat80_t * ); - -#ifdef FLOAT16 -float16_t subj_extF80M_to_f16( const extFloat80_t * ); -#endif -float32_t subj_extF80M_to_f32( const extFloat80_t * ); -#ifdef FLOAT64 -float64_t subj_extF80M_to_f64( const extFloat80_t * ); -#endif -#ifdef EXTFLOAT80 -void subj_extF80M_to_f128M( const extFloat80_t *, float128_t * ); -#endif - -void - subj_extF80M_roundToInt_r_near_even( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_minMag( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_min( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_r_max( const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_roundToInt_r_near_maxMag( const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_roundToInt_x( const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_add( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_sub( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_mul( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_div( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void - subj_extF80M_rem( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -void subj_extF80M_sqrt( const extFloat80_t *, extFloat80_t * ); -bool subj_extF80M_eq( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_le( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_lt( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_eq_signaling( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_le_quiet( const extFloat80_t *, const extFloat80_t * ); -bool subj_extF80M_lt_quiet( const extFloat80_t *, const extFloat80_t * ); - -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT128 - -uint_fast32_t subj_f128M_to_ui32_r_near_even( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_minMag( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_min( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_max( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_r_near_maxMag( extFloat80_t * ); -uint_fast64_t subj_f128M_to_ui64_r_near_even( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_minMag( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_min( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_max( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_r_near_maxMag( extFloat80_t * ); -int_fast32_t subj_f128M_to_i32_r_near_even( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_minMag( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_min( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_max( const float128_t * ); -int_fast32_t subj_f128M_to_i32_r_near_maxMag( extFloat80_t * ); -int_fast64_t subj_f128M_to_i64_r_near_even( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_minMag( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_min( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_max( const float128_t * ); -int_fast64_t subj_f128M_to_i64_r_near_maxMag( extFloat80_t * ); - -uint_fast32_t subj_f128M_to_ui32_rx_near_even( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_minMag( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_min( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_max( const float128_t * ); -uint_fast32_t subj_f128M_to_ui32_rx_near_maxMag( extFloat80_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_near_even( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_minMag( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_min( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_max( const float128_t * ); -uint_fast64_t subj_f128M_to_ui64_rx_near_maxMag( extFloat80_t * ); -int_fast32_t subj_f128M_to_i32_rx_near_even( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_minMag( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_min( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_max( const float128_t * ); -int_fast32_t subj_f128M_to_i32_rx_near_maxMag( extFloat80_t * ); -int_fast64_t subj_f128M_to_i64_rx_near_even( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_minMag( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_min( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_max( const float128_t * ); -int_fast64_t subj_f128M_to_i64_rx_near_maxMag( extFloat80_t * ); - -#ifdef FLOAT16 -float16_t subj_f128M_to_f16( const float128_t * ); -#endif -float32_t subj_f128M_to_f32( const float128_t * ); -#ifdef FLOAT64 -float64_t subj_f128M_to_f64( const float128_t * ); -#endif -#ifdef FLOAT128 -void subj_f128M_to_extF80M( const float128_t *, extFloat80_t * ); -#endif - -void subj_f128M_roundToInt_r_near_even( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_minMag( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_min( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_max( const float128_t, float128_t * ); -void subj_f128M_roundToInt_r_near_maxMag( const float128_t, float128_t * ); -void subj_f128M_roundToInt_x( const float128_t, float128_t * ); -void subj_f128M_add( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_sub( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_mul( const float128_t *, const float128_t *, float128_t * ); -void - subj_f128M_mulAdd( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -void subj_f128M_div( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_rem( const float128_t *, const float128_t *, float128_t * ); -void subj_f128M_sqrt( const float128_t *, float128_t * ); -bool subj_f128M_eq( const float128_t *, const float128_t * ); -bool subj_f128M_le( const float128_t *, const float128_t * ); -bool subj_f128M_lt( const float128_t *, const float128_t * ); -bool subj_f128M_eq_signaling( const float128_t *, const float128_t * ); -bool subj_f128M_le_quiet( const float128_t *, const float128_t * ); -bool subj_f128M_lt_quiet( const float128_t *, const float128_t * ); - -#endif - diff --git a/addins/TestFloat-3e/source/subjfloat_functions.c b/addins/TestFloat-3e/source/subjfloat_functions.c deleted file mode 100644 index 4d3ff6248..000000000 --- a/addins/TestFloat-3e/source/subjfloat_functions.c +++ /dev/null @@ -1,1810 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "subjfloat_config.h" -#include "subjfloat.h" -#include "functions.h" - -typedef void genericFuncType(); - -/*---------------------------------------------------------------------------- -| WARNING: -| This file should not normally be modified. See "subjfloat_config.h" -| instead. -| The order of these array entries must match the order in the array -| `standardFunctionInfos'. Be careful about making changes. -*----------------------------------------------------------------------------*/ - -genericFuncType *const subjfloat_functions[] = { - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_UI32_TO_F16 - (genericFuncType *) subj_ui32_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_UI32_TO_F32 - (genericFuncType *) subj_ui32_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI32_TO_F64 - (genericFuncType *) subj_ui32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI32_TO_EXTF80 - (genericFuncType *) subj_ui32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI32_TO_F128 - (genericFuncType *) subj_ui32_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_UI64_TO_F16 - (genericFuncType *) subj_ui64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_UI64_TO_F32 - (genericFuncType *) subj_ui64_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI64_TO_F64 - (genericFuncType *) subj_ui64_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI64_TO_EXTF80 - (genericFuncType *) subj_ui64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI64_TO_F128 - (genericFuncType *) subj_ui64_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I32_TO_F16 - (genericFuncType *) subj_i32_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_I32_TO_F32 - (genericFuncType *) subj_i32_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I32_TO_F64 - (genericFuncType *) subj_i32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I32_TO_EXTF80 - (genericFuncType *) subj_i32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I32_TO_F128 - (genericFuncType *) subj_i32_to_f128M, -#else - 0, -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I64_TO_F16 - (genericFuncType *) subj_i64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_I64_TO_F32 - (genericFuncType *) subj_i64_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I64_TO_F64 - (genericFuncType *) subj_i64_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I64_TO_EXTF80 - (genericFuncType *) subj_i64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I64_TO_F128 - (genericFuncType *) subj_i64_to_f128M, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_F16_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MINMAG - (genericFuncType *) subj_f16_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MIN - (genericFuncType *) subj_f16_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_MAX - (genericFuncType *) subj_f16_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MINMAG - (genericFuncType *) subj_f16_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MIN - (genericFuncType *) subj_f16_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_MAX - (genericFuncType *) subj_f16_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MINMAG - (genericFuncType *) subj_f16_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MIN - (genericFuncType *) subj_f16_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_MAX - (genericFuncType *) subj_f16_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f16_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MINMAG - (genericFuncType *) subj_f16_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MIN - (genericFuncType *) subj_f16_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_MAX - (genericFuncType *) subj_f16_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f16_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MIN - (genericFuncType *) subj_f16_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_MAX - (genericFuncType *) subj_f16_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f16_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MIN - (genericFuncType *) subj_f16_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_MAX - (genericFuncType *) subj_f16_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MINMAG - (genericFuncType *) subj_f16_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MIN - (genericFuncType *) subj_f16_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_MAX - (genericFuncType *) subj_f16_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f16_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MINMAG - (genericFuncType *) subj_f16_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MIN - (genericFuncType *) subj_f16_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_MAX - (genericFuncType *) subj_f16_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f16_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_TO_F32 - (genericFuncType *) subj_f16_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F16_TO_F64 - (genericFuncType *) subj_f16_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F16_TO_EXTF80 - (genericFuncType *) subj_f16_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F16_TO_F128 - (genericFuncType *) subj_f16_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f16_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f16_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f16_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f16_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f16_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F16_ROUNDTOINT_X - (genericFuncType *) subj_f16_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F16_ADD - (genericFuncType *) subj_f16_add, -#else - 0, -#endif -#ifdef SUBJ_F16_SUB - (genericFuncType *) subj_f16_sub, -#else - 0, -#endif -#ifdef SUBJ_F16_MUL - (genericFuncType *) subj_f16_mul, -#else - 0, -#endif -#ifdef SUBJ_F16_MULADD - (genericFuncType *) subj_f16_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F16_DIV - (genericFuncType *) subj_f16_div, -#else - 0, -#endif -#ifdef SUBJ_F16_REM - (genericFuncType *) subj_f16_rem, -#else - 0, -#endif -#ifdef SUBJ_F16_SQRT - (genericFuncType *) subj_f16_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F16_EQ - (genericFuncType *) subj_f16_eq, -#else - 0, -#endif -#ifdef SUBJ_F16_LE - (genericFuncType *) subj_f16_le, -#else - 0, -#endif -#ifdef SUBJ_F16_LT - (genericFuncType *) subj_f16_lt, -#else - 0, -#endif -#ifdef SUBJ_F16_EQ_SIGNALING - (genericFuncType *) subj_f16_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F16_LE_QUIET - (genericFuncType *) subj_f16_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F16_LT_QUIET - (genericFuncType *) subj_f16_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef SUBJ_F32_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MINMAG - (genericFuncType *) subj_f32_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MIN - (genericFuncType *) subj_f32_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_MAX - (genericFuncType *) subj_f32_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MINMAG - (genericFuncType *) subj_f32_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MIN - (genericFuncType *) subj_f32_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_MAX - (genericFuncType *) subj_f32_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MINMAG - (genericFuncType *) subj_f32_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MIN - (genericFuncType *) subj_f32_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_MAX - (genericFuncType *) subj_f32_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f32_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MINMAG - (genericFuncType *) subj_f32_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MIN - (genericFuncType *) subj_f32_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_MAX - (genericFuncType *) subj_f32_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f32_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MIN - (genericFuncType *) subj_f32_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_MAX - (genericFuncType *) subj_f32_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f32_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MIN - (genericFuncType *) subj_f32_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_MAX - (genericFuncType *) subj_f32_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MINMAG - (genericFuncType *) subj_f32_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MIN - (genericFuncType *) subj_f32_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_MAX - (genericFuncType *) subj_f32_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f32_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MINMAG - (genericFuncType *) subj_f32_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MIN - (genericFuncType *) subj_f32_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_MAX - (genericFuncType *) subj_f32_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F32_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f32_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F32_TO_F16 - (genericFuncType *) subj_f32_to_f16, -#else - 0, -#endif -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F32_TO_F64 - (genericFuncType *) subj_f32_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F32_TO_EXTF80 - (genericFuncType *) subj_f32_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F32_TO_F128 - (genericFuncType *) subj_f32_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f32_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f32_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f32_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f32_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f32_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F32_ROUNDTOINT_X - (genericFuncType *) subj_f32_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F32_ADD - (genericFuncType *) subj_f32_add, -#else - 0, -#endif -#ifdef SUBJ_F32_SUB - (genericFuncType *) subj_f32_sub, -#else - 0, -#endif -#ifdef SUBJ_F32_MUL - (genericFuncType *) subj_f32_mul, -#else - 0, -#endif -#ifdef SUBJ_F32_MULADD - (genericFuncType *) subj_f32_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F32_DIV - (genericFuncType *) subj_f32_div, -#else - 0, -#endif -#ifdef SUBJ_F32_REM - (genericFuncType *) subj_f32_rem, -#else - 0, -#endif -#ifdef SUBJ_F32_SQRT - (genericFuncType *) subj_f32_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F32_EQ - (genericFuncType *) subj_f32_eq, -#else - 0, -#endif -#ifdef SUBJ_F32_LE - (genericFuncType *) subj_f32_le, -#else - 0, -#endif -#ifdef SUBJ_F32_LT - (genericFuncType *) subj_f32_lt, -#else - 0, -#endif -#ifdef SUBJ_F32_EQ_SIGNALING - (genericFuncType *) subj_f32_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F32_LE_QUIET - (genericFuncType *) subj_f32_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F32_LT_QUIET - (genericFuncType *) subj_f32_lt_quiet, -#else - 0, -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT64 -#ifdef SUBJ_F64_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MINMAG - (genericFuncType *) subj_f64_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MIN - (genericFuncType *) subj_f64_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_MAX - (genericFuncType *) subj_f64_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MINMAG - (genericFuncType *) subj_f64_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MIN - (genericFuncType *) subj_f64_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_MAX - (genericFuncType *) subj_f64_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MINMAG - (genericFuncType *) subj_f64_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MIN - (genericFuncType *) subj_f64_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_MAX - (genericFuncType *) subj_f64_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f64_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MINMAG - (genericFuncType *) subj_f64_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MIN - (genericFuncType *) subj_f64_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_MAX - (genericFuncType *) subj_f64_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f64_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MIN - (genericFuncType *) subj_f64_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_MAX - (genericFuncType *) subj_f64_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f64_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MIN - (genericFuncType *) subj_f64_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_MAX - (genericFuncType *) subj_f64_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MINMAG - (genericFuncType *) subj_f64_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MIN - (genericFuncType *) subj_f64_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_MAX - (genericFuncType *) subj_f64_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f64_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MINMAG - (genericFuncType *) subj_f64_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MIN - (genericFuncType *) subj_f64_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_MAX - (genericFuncType *) subj_f64_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F64_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f64_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F64_TO_F16 - (genericFuncType *) subj_f64_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_F64_TO_F32 - (genericFuncType *) subj_f64_to_f32, -#else - 0, -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F64_TO_EXTF80 - (genericFuncType *) subj_f64_to_extF80M, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F64_TO_F128 - (genericFuncType *) subj_f64_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f64_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f64_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f64_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f64_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f64_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F64_ROUNDTOINT_X - (genericFuncType *) subj_f64_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F64_ADD - (genericFuncType *) subj_f64_add, -#else - 0, -#endif -#ifdef SUBJ_F64_SUB - (genericFuncType *) subj_f64_sub, -#else - 0, -#endif -#ifdef SUBJ_F64_MUL - (genericFuncType *) subj_f64_mul, -#else - 0, -#endif -#ifdef SUBJ_F64_MULADD - (genericFuncType *) subj_f64_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F64_DIV - (genericFuncType *) subj_f64_div, -#else - 0, -#endif -#ifdef SUBJ_F64_REM - (genericFuncType *) subj_f64_rem, -#else - 0, -#endif -#ifdef SUBJ_F64_SQRT - (genericFuncType *) subj_f64_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F64_EQ - (genericFuncType *) subj_f64_eq, -#else - 0, -#endif -#ifdef SUBJ_F64_LE - (genericFuncType *) subj_f64_le, -#else - 0, -#endif -#ifdef SUBJ_F64_LT - (genericFuncType *) subj_f64_lt, -#else - 0, -#endif -#ifdef SUBJ_F64_EQ_SIGNALING - (genericFuncType *) subj_f64_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F64_LE_QUIET - (genericFuncType *) subj_f64_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F64_LT_QUIET - (genericFuncType *) subj_f64_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 -#ifdef SUBJ_EXTF80_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MINMAG - (genericFuncType *) subj_extF80M_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MIN - (genericFuncType *) subj_extF80M_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_MAX - (genericFuncType *) subj_extF80M_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MINMAG - (genericFuncType *) subj_extF80M_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MIN - (genericFuncType *) subj_extF80M_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_MAX - (genericFuncType *) subj_extF80M_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MINMAG - (genericFuncType *) subj_extF80M_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MIN - (genericFuncType *) subj_extF80M_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_MAX - (genericFuncType *) subj_extF80M_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MINMAG - (genericFuncType *) subj_extF80M_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MIN - (genericFuncType *) subj_extF80M_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_MAX - (genericFuncType *) subj_extF80M_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MINMAG - (genericFuncType *) subj_extF80M_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MIN - (genericFuncType *) subj_extF80M_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_MAX - (genericFuncType *) subj_extF80M_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MINMAG - (genericFuncType *) subj_extF80M_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MIN - (genericFuncType *) subj_extF80M_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_MAX - (genericFuncType *) subj_extF80M_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MINMAG - (genericFuncType *) subj_extF80M_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MIN - (genericFuncType *) subj_extF80M_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_MAX - (genericFuncType *) subj_extF80M_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_extF80M_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MINMAG - (genericFuncType *) subj_extF80M_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MIN - (genericFuncType *) subj_extF80M_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_MAX - (genericFuncType *) subj_extF80M_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_EXTF80_TO_F16 - (genericFuncType *) subj_extF80M_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_EXTF80_TO_F32 - (genericFuncType *) subj_extF80M_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_EXTF80_TO_F64 - (genericFuncType *) subj_extF80M_to_f64, -#else - 0, -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_EXTF80_TO_F128 - (genericFuncType *) subj_extF80M_to_f128M, -#else - 0, -#endif -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_extF80M_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_extF80M_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MIN - (genericFuncType *) subj_extF80M_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_MAX - (genericFuncType *) subj_extF80M_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_extF80M_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ROUNDTOINT_X - (genericFuncType *) subj_extF80M_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_ADD - (genericFuncType *) subj_extF80M_add, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_SUB - (genericFuncType *) subj_extF80M_sub, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_MUL - (genericFuncType *) subj_extF80M_mul, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_DIV - (genericFuncType *) subj_extF80M_div, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_REM - (genericFuncType *) subj_extF80M_rem, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_SQRT - (genericFuncType *) subj_extF80M_sqrt, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_EQ - (genericFuncType *) subj_extF80M_eq, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LE - (genericFuncType *) subj_extF80M_le, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LT - (genericFuncType *) subj_extF80M_lt, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_EQ_SIGNALING - (genericFuncType *) subj_extF80M_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LE_QUIET - (genericFuncType *) subj_extF80M_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_EXTF80_LT_QUIET - (genericFuncType *) subj_extF80M_lt_quiet, -#else - 0, -#endif -#endif - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ -#ifdef FLOAT128 -#ifdef SUBJ_F128_TO_UI32_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MINMAG - (genericFuncType *) subj_f128M_to_ui32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MIN - (genericFuncType *) subj_f128M_to_ui32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_MAX - (genericFuncType *) subj_f128M_to_ui32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MINMAG - (genericFuncType *) subj_f128M_to_ui64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MIN - (genericFuncType *) subj_f128M_to_ui64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_MAX - (genericFuncType *) subj_f128M_to_ui64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i32_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MINMAG - (genericFuncType *) subj_f128M_to_i32_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MIN - (genericFuncType *) subj_f128M_to_i32_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_MAX - (genericFuncType *) subj_f128M_to_i32_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i32_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i64_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MINMAG - (genericFuncType *) subj_f128M_to_i64_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MIN - (genericFuncType *) subj_f128M_to_i64_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_MAX - (genericFuncType *) subj_f128M_to_i64_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i64_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MINMAG - (genericFuncType *) subj_f128M_to_ui32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MIN - (genericFuncType *) subj_f128M_to_ui32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_MAX - (genericFuncType *) subj_f128M_to_ui32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_ui64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MINMAG - (genericFuncType *) subj_f128M_to_ui64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MIN - (genericFuncType *) subj_f128M_to_ui64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_MAX - (genericFuncType *) subj_f128M_to_ui64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_UI64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_ui64_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i32_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MINMAG - (genericFuncType *) subj_f128M_to_i32_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MIN - (genericFuncType *) subj_f128M_to_i32_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_MAX - (genericFuncType *) subj_f128M_to_i32_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I32_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i32_rx_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_NEAR_EVEN - (genericFuncType *) subj_f128M_to_i64_rx_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MINMAG - (genericFuncType *) subj_f128M_to_i64_rx_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MIN - (genericFuncType *) subj_f128M_to_i64_rx_min, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_MAX - (genericFuncType *) subj_f128M_to_i64_rx_max, -#else - 0, -#endif -#ifdef SUBJ_F128_TO_I64_RX_NEAR_MAXMAG - (genericFuncType *) subj_f128M_to_i64_rx_near_maxMag, -#else - 0, -#endif -#ifdef FLOAT16 -#ifdef SUBJ_F128_TO_F16 - (genericFuncType *) subj_f128M_to_f16, -#else - 0, -#endif -#endif -#ifdef SUBJ_F128_TO_F32 - (genericFuncType *) subj_f128M_to_f32, -#else - 0, -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F128_TO_F64 - (genericFuncType *) subj_f128M_to_f64, -#else - 0, -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F128_TO_EXTF80 - (genericFuncType *) subj_f128M_to_extF80M, -#else - 0, -#endif -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_NEAR_EVEN - (genericFuncType *) subj_f128M_roundToInt_r_near_even, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MINMAG - (genericFuncType *) subj_f128M_roundToInt_r_minMag, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MIN - (genericFuncType *) subj_f128M_roundToInt_r_min, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_MAX - (genericFuncType *) subj_f128M_roundToInt_r_max, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_R_NEAR_MAXMAG - (genericFuncType *) subj_f128M_roundToInt_r_near_maxMag, -#else - 0, -#endif -#ifdef SUBJ_F128_ROUNDTOINT_X - (genericFuncType *) subj_f128M_roundToInt_x, -#else - 0, -#endif -#ifdef SUBJ_F128_ADD - (genericFuncType *) subj_f128M_add, -#else - 0, -#endif -#ifdef SUBJ_F128_SUB - (genericFuncType *) subj_f128M_sub, -#else - 0, -#endif -#ifdef SUBJ_F128_MUL - (genericFuncType *) subj_f128M_mul, -#else - 0, -#endif -#ifdef SUBJ_F128_MULADD - (genericFuncType *) subj_f128M_mulAdd, -#else - 0, -#endif -#ifdef SUBJ_F128_DIV - (genericFuncType *) subj_f128M_div, -#else - 0, -#endif -#ifdef SUBJ_F128_REM - (genericFuncType *) subj_f128M_rem, -#else - 0, -#endif -#ifdef SUBJ_F128_SQRT - (genericFuncType *) subj_f128M_sqrt, -#else - 0, -#endif -#ifdef SUBJ_F128_EQ - (genericFuncType *) subj_f128M_eq, -#else - 0, -#endif -#ifdef SUBJ_F128_LE - (genericFuncType *) subj_f128M_le, -#else - 0, -#endif -#ifdef SUBJ_F128_LT - (genericFuncType *) subj_f128M_lt, -#else - 0, -#endif -#ifdef SUBJ_F128_EQ_SIGNALING - (genericFuncType *) subj_f128M_eq_signaling, -#else - 0, -#endif -#ifdef SUBJ_F128_LE_QUIET - (genericFuncType *) subj_f128M_le_quiet, -#else - 0, -#endif -#ifdef SUBJ_F128_LT_QUIET - (genericFuncType *) subj_f128M_lt_quiet, -#else - 0, -#endif -#endif -}; - diff --git a/addins/TestFloat-3e/source/testLoops.h b/addins/TestFloat-3e/source/testLoops.h deleted file mode 100644 index e198eaefb..000000000 --- a/addins/TestFloat-3e/source/testLoops.h +++ /dev/null @@ -1,578 +0,0 @@ - -/*============================================================================ - -This C header file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include "softfloat.h" - -extern bool testLoops_forever; - -extern uint_fast8_t *testLoops_trueFlagsPtr; -extern uint_fast8_t (*testLoops_subjFlagsFunction)( void ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -void test_a_ui32_z_f16( float16_t ( uint32_t ), float16_t ( uint32_t ) ); -#endif -void test_a_ui32_z_f32( float32_t ( uint32_t ), float32_t ( uint32_t ) ); -#ifdef FLOAT64 -void test_a_ui32_z_f64( float64_t ( uint32_t ), float64_t ( uint32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_ui32_z_extF80( - void ( uint32_t, extFloat80_t * ), void ( uint32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_ui32_z_f128( - void ( uint32_t, float128_t * ), void ( uint32_t, float128_t * ) - ); -#endif -#ifdef FLOAT16 -void test_a_ui64_z_f16( float16_t ( uint64_t ), float16_t ( uint64_t ) ); -#endif -void test_a_ui64_z_f32( float32_t ( uint64_t ), float32_t ( uint64_t ) ); -#ifdef FLOAT64 -void test_a_ui64_z_f64( float64_t ( uint64_t ), float64_t ( uint64_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_ui64_z_extF80( - void ( uint64_t, extFloat80_t * ), void ( uint64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_ui64_z_f128( - void ( uint64_t, float128_t * ), void ( uint64_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void test_a_i32_z_f16( float16_t ( int32_t ), float16_t ( int32_t ) ); -#endif -void test_a_i32_z_f32( float32_t ( int32_t ), float32_t ( int32_t ) ); -#ifdef FLOAT64 -void test_a_i32_z_f64( float64_t ( int32_t ), float64_t ( int32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_i32_z_extF80( - void ( int32_t, extFloat80_t * ), void ( int32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_i32_z_f128( - void ( int32_t, float128_t * ), void ( int32_t, float128_t * ) ); -#endif -#ifdef FLOAT16 -void test_a_i64_z_f16( float16_t ( int64_t ), float16_t ( int64_t ) ); -#endif -void test_a_i64_z_f32( float32_t ( int64_t ), float32_t ( int64_t ) ); -#ifdef FLOAT64 -void test_a_i64_z_f64( float64_t ( int64_t ), float64_t ( int64_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_i64_z_extF80( - void ( int64_t, extFloat80_t * ), void ( int64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_i64_z_f128( - void ( int64_t, float128_t * ), void ( int64_t, float128_t * ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT16 -void - test_a_f16_z_ui32_rx( - uint_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_ui64_rx( - uint_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_i32_rx( - int_fast32_t ( float16_t, uint_fast8_t, bool ), - int_fast32_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_i64_rx( - int_fast64_t ( float16_t, uint_fast8_t, bool ), - int_fast64_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f16_z_ui32_x( - uint_fast32_t ( float16_t, bool ), uint_fast32_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_ui64_x( - uint_fast64_t ( float16_t, bool ), uint_fast64_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_i32_x( - int_fast32_t ( float16_t, bool ), int_fast32_t ( float16_t, bool ), bool - ); -void - test_a_f16_z_i64_x( - int_fast64_t ( float16_t, bool ), int_fast64_t ( float16_t, bool ), bool - ); -void test_a_f16_z_f32( float32_t ( float16_t ), float32_t ( float16_t ) ); -#ifdef FLOAT64 -void test_a_f16_z_f64( float64_t ( float16_t ), float64_t ( float16_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f16_z_extF80( - void ( float16_t, extFloat80_t * ), void ( float16_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f16_z_f128( - void ( float16_t, float128_t * ), void ( float16_t, float128_t * ) ); -#endif -void test_az_f16( float16_t ( float16_t ), float16_t ( float16_t ) ); -void - test_az_f16_rx( - float16_t ( float16_t, uint_fast8_t, bool ), - float16_t ( float16_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f16( - float16_t ( float16_t, float16_t ), float16_t ( float16_t, float16_t ) ); -void - test_abcz_f16( - float16_t ( float16_t, float16_t, float16_t ), - float16_t ( float16_t, float16_t, float16_t ) - ); -void - test_ab_f16_z_bool( - bool ( float16_t, float16_t ), bool ( float16_t, float16_t ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -void - test_a_f32_z_ui32_rx( - uint_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_ui64_rx( - uint_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_i32_rx( - int_fast32_t ( float32_t, uint_fast8_t, bool ), - int_fast32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_i64_rx( - int_fast64_t ( float32_t, uint_fast8_t, bool ), - int_fast64_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f32_z_ui32_x( - uint_fast32_t ( float32_t, bool ), uint_fast32_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_ui64_x( - uint_fast64_t ( float32_t, bool ), uint_fast64_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_i32_x( - int_fast32_t ( float32_t, bool ), int_fast32_t ( float32_t, bool ), bool - ); -void - test_a_f32_z_i64_x( - int_fast64_t ( float32_t, bool ), int_fast64_t ( float32_t, bool ), bool - ); -#ifdef FLOAT16 -void test_a_f32_z_f16( float16_t ( float32_t ), float16_t ( float32_t ) ); -#endif -#ifdef FLOAT64 -void test_a_f32_z_f64( float64_t ( float32_t ), float64_t ( float32_t ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f32_z_extF80( - void ( float32_t, extFloat80_t * ), void ( float32_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f32_z_f128( - void ( float32_t, float128_t * ), void ( float32_t, float128_t * ) ); -#endif -void test_az_f32( float32_t ( float32_t ), float32_t ( float32_t ) ); -void - test_az_f32_rx( - float32_t ( float32_t, uint_fast8_t, bool ), - float32_t ( float32_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f32( - float32_t ( float32_t, float32_t ), float32_t ( float32_t, float32_t ) ); -void - test_abcz_f32( - float32_t ( float32_t, float32_t, float32_t ), - float32_t ( float32_t, float32_t, float32_t ) - ); -void - test_ab_f32_z_bool( - bool ( float32_t, float32_t ), bool ( float32_t, float32_t ) ); - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT64 -void - test_a_f64_z_ui32_rx( - uint_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_ui64_rx( - uint_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_i32_rx( - int_fast32_t ( float64_t, uint_fast8_t, bool ), - int_fast32_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_i64_rx( - int_fast64_t ( float64_t, uint_fast8_t, bool ), - int_fast64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f64_z_ui32_x( - uint_fast32_t ( float64_t, bool ), uint_fast32_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_ui64_x( - uint_fast64_t ( float64_t, bool ), uint_fast64_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_i32_x( - int_fast32_t ( float64_t, bool ), int_fast32_t ( float64_t, bool ), bool - ); -void - test_a_f64_z_i64_x( - int_fast64_t ( float64_t, bool ), int_fast64_t ( float64_t, bool ), bool - ); -#ifdef FLOAT16 -void test_a_f64_z_f16( float16_t ( float64_t ), float16_t ( float64_t ) ); -#endif -void test_a_f64_z_f32( float32_t ( float64_t ), float32_t ( float64_t ) ); -#ifdef EXTFLOAT80 -void - test_a_f64_z_extF80( - void ( float64_t, extFloat80_t * ), void ( float64_t, extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_f64_z_f128( - void ( float64_t, float128_t * ), void ( float64_t, float128_t * ) ); -#endif -void test_az_f64( float64_t ( float64_t ), float64_t ( float64_t ) ); -void - test_az_f64_rx( - float64_t ( float64_t, uint_fast8_t, bool ), - float64_t ( float64_t, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_abz_f64( - float64_t ( float64_t, float64_t ), float64_t ( float64_t, float64_t ) ); -void - test_abcz_f64( - float64_t ( float64_t, float64_t, float64_t ), - float64_t ( float64_t, float64_t, float64_t ) - ); -void - test_ab_f64_z_bool( - bool ( float64_t, float64_t ), bool ( float64_t, float64_t ) ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 -void - test_a_extF80_z_ui32_rx( - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_ui64_rx( - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_i32_rx( - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - int_fast32_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_i64_rx( - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - int_fast64_t ( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_extF80_z_ui32_x( - uint_fast32_t ( const extFloat80_t *, bool ), - uint_fast32_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_ui64_x( - uint_fast64_t ( const extFloat80_t *, bool ), - uint_fast64_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_i32_x( - int_fast32_t ( const extFloat80_t *, bool ), - int_fast32_t ( const extFloat80_t *, bool ), - bool - ); -void - test_a_extF80_z_i64_x( - int_fast64_t ( const extFloat80_t *, bool ), - int_fast64_t ( const extFloat80_t *, bool ), - bool - ); -#ifdef FLOAT16 -void - test_a_extF80_z_f16( - float16_t ( const extFloat80_t * ), float16_t ( const extFloat80_t * ) ); -#endif -void - test_a_extF80_z_f32( - float32_t ( const extFloat80_t * ), float32_t ( const extFloat80_t * ) ); -#ifdef FLOAT64 -void - test_a_extF80_z_f64( - float64_t ( const extFloat80_t * ), float64_t ( const extFloat80_t * ) ); -#endif -#ifdef FLOAT128 -void - test_a_extF80_z_f128( - void ( const extFloat80_t *, float128_t * ), - void ( const extFloat80_t *, float128_t * ) - ); -#endif -void - test_az_extF80( - void ( const extFloat80_t *, extFloat80_t * ), - void ( const extFloat80_t *, extFloat80_t * ) - ); -void - test_az_extF80_rx( - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - void ( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t, - bool - ); -void - test_abz_extF80( - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ), - void ( const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ); -void - test_ab_extF80_z_bool( - bool ( const extFloat80_t *, const extFloat80_t * ), - bool ( const extFloat80_t *, const extFloat80_t * ) - ); -#endif - -/*---------------------------------------------------------------------------- -*----------------------------------------------------------------------------*/ -#ifdef FLOAT128 -void - test_a_f128_z_ui32_rx( - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_ui64_rx( - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_i32_rx( - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - int_fast32_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_i64_rx( - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - int_fast64_t ( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t, - bool - ); -void - test_a_f128_z_ui32_x( - uint_fast32_t ( const float128_t *, bool ), - uint_fast32_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_ui64_x( - uint_fast64_t ( const float128_t *, bool ), - uint_fast64_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_i32_x( - int_fast32_t ( const float128_t *, bool ), - int_fast32_t ( const float128_t *, bool ), - bool - ); -void - test_a_f128_z_i64_x( - int_fast64_t ( const float128_t *, bool ), - int_fast64_t ( const float128_t *, bool ), - bool - ); -#ifdef FLOAT16 -void - test_a_f128_z_f16( - float16_t ( const float128_t * ), float16_t ( const float128_t * ) ); -#endif -void - test_a_f128_z_f32( - float32_t ( const float128_t * ), float32_t ( const float128_t * ) ); -#ifdef FLOAT64 -void - test_a_f128_z_f64( - float64_t ( const float128_t * ), float64_t ( const float128_t * ) ); -#endif -#ifdef EXTFLOAT80 -void - test_a_f128_z_extF80( - void ( const float128_t *, extFloat80_t * ), - void ( const float128_t *, extFloat80_t * ) - ); -#endif -void - test_az_f128( - void ( const float128_t *, float128_t * ), - void ( const float128_t *, float128_t * ) - ); -void - test_az_f128_rx( - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - void ( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t, - bool - ); -void - test_abz_f128( - void ( const float128_t *, const float128_t *, float128_t * ), - void ( const float128_t *, const float128_t *, float128_t * ) - ); -void - test_abcz_f128( - void - ( const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ), - void - ( const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ); -void - test_ab_f128_z_bool( - bool ( const float128_t *, const float128_t * ), - bool ( const float128_t *, const float128_t * ) - ); -#endif - diff --git a/addins/TestFloat-3e/source/testLoops_common.c b/addins/TestFloat-3e/source/testLoops_common.c deleted file mode 100644 index 1553aa110..000000000 --- a/addins/TestFloat-3e/source/testLoops_common.c +++ /dev/null @@ -1,47 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "testLoops.h" - -bool testLoops_forever = false; - -uint_fast8_t *testLoops_trueFlagsPtr; -uint_fast8_t (*testLoops_subjFlagsFunction)( void ); - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f128.c b/addins/TestFloat-3e/source/test_a_extF80_z_f128.c deleted file mode 100644 index 505ef1279..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f128.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined EXTFLOAT80 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f128( - void trueFunction( const extFloat80_t *, float128_t * ), - void subjFunction( const extFloat80_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f16.c b/addins/TestFloat-3e/source/test_a_extF80_z_f16.c deleted file mode 100644 index e6a6651d2..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f16.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f16( - float16_t trueFunction( const extFloat80_t * ), - float16_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f32.c b/addins/TestFloat-3e/source/test_a_extF80_z_f32.c deleted file mode 100644 index c752515d1..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f32( - float32_t trueFunction( const extFloat80_t * ), - float32_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_f64.c b/addins/TestFloat-3e/source/test_a_extF80_z_f64.c deleted file mode 100644 index 4d24fb194..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_f64.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_f64( - float64_t trueFunction( const extFloat80_t * ), - float64_t subjFunction( const extFloat80_t * ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c deleted file mode 100644 index fd2eea41d..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i32_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i32_rx( - int_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - int_fast32_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c deleted file mode 100644 index 2260614d6..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i32_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i32_x( - int_fast32_t trueFunction( const extFloat80_t *, bool ), - int_fast32_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c deleted file mode 100644 index 0b99e99b4..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i64_rx.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i64_rx( - int_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - int_fast64_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c deleted file mode 100644 index 9e7a5b179..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_i64_x.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_i64_x( - int_fast64_t trueFunction( const extFloat80_t *, bool ), - int_fast64_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! extF80M_isNaN( &genCases_extF80_a ) - || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c deleted file mode 100644 index fcc92da85..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui32_rx( - uint_fast32_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast32_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c deleted file mode 100644 index ff16f1998..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui32_x( - uint_fast32_t trueFunction( const extFloat80_t *, bool ), - uint_fast32_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c deleted file mode 100644 index efab40e80..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui64_rx( - uint_fast64_t trueFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast64_t subjFunction( const extFloat80_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c deleted file mode 100644 index 1c1d04ef1..000000000 --- a/addins/TestFloat-3e/source/test_a_extF80_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_extF80_z_ui64_x( - uint_fast64_t trueFunction( const extFloat80_t *, bool ), - uint_fast64_t subjFunction( const extFloat80_t *, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_extF80.c b/addins/TestFloat-3e/source/test_a_f128_z_extF80.c deleted file mode 100644 index 1bb3e19d2..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_extF80.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined EXTFLOAT80 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_extF80( - void trueFunction( const float128_t *, extFloat80_t * ), - void subjFunction( const float128_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f16.c b/addins/TestFloat-3e/source/test_a_f128_z_f16.c deleted file mode 100644 index eb8b3fbec..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f16.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f16( - float16_t trueFunction( const float128_t * ), - float16_t subjFunction( const float128_t * ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f32.c b/addins/TestFloat-3e/source/test_a_f128_z_f32.c deleted file mode 100644 index 7df7b1fb0..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f32( - float32_t trueFunction( const float128_t * ), - float32_t subjFunction( const float128_t * ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_f64.c b/addins/TestFloat-3e/source/test_a_f128_z_f64.c deleted file mode 100644 index 96ac1e00a..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_f64.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_f64( - float64_t trueFunction( const float128_t * ), - float64_t subjFunction( const float128_t * ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c deleted file mode 100644 index 7aa68b9fd..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i32_rx( - int_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - int_fast32_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c deleted file mode 100644 index 3f2b1cb68..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i32_x( - int_fast32_t trueFunction( const float128_t *, bool ), - int_fast32_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c deleted file mode 100644 index cac33bf3c..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i64_rx( - int_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - int_fast64_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c deleted file mode 100644 index c5004c879..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_i64_x( - int_fast64_t trueFunction( const float128_t *, bool ), - int_fast64_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f128M_isNaN( &genCases_f128_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c deleted file mode 100644 index e4ae8cdfa..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui32_rx( - uint_fast32_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast32_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c deleted file mode 100644 index 9493f4e67..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui32_x( - uint_fast32_t trueFunction( const float128_t *, bool ), - uint_fast32_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c deleted file mode 100644 index 2f336de34..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui64_rx( - uint_fast64_t trueFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast64_t subjFunction( const float128_t *, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c deleted file mode 100644 index 37f703a4b..000000000 --- a/addins/TestFloat-3e/source/test_a_f128_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f128_z_ui64_x( - uint_fast64_t trueFunction( const float128_t *, bool ), - uint_fast64_t subjFunction( const float128_t *, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, "\n\t" ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_extF80.c b/addins/TestFloat-3e/source/test_a_f16_z_extF80.c deleted file mode 100644 index d8f39f6fd..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_extF80( - void trueFunction( float16_t, extFloat80_t * ), - void subjFunction( float16_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f16_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f128.c b/addins/TestFloat-3e/source/test_a_f16_z_f128.c deleted file mode 100644 index 433418b63..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f128( - void trueFunction( float16_t, float128_t * ), - void subjFunction( float16_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f16_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f16_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f32.c b/addins/TestFloat-3e/source/test_a_f16_z_f32.c deleted file mode 100644 index 8e8460787..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f32( - float32_t trueFunction( float16_t ), float32_t subjFunction( float16_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_f64.c b/addins/TestFloat-3e/source/test_a_f16_z_f64.c deleted file mode 100644 index bf0f343c5..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_f64( - float64_t trueFunction( float16_t ), float64_t subjFunction( float16_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c deleted file mode 100644 index c73fc7625..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i32_rx( - int_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c deleted file mode 100644 index 2eaba6f2a..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i32_x( - int_fast32_t trueFunction( float16_t, bool ), - int_fast32_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c deleted file mode 100644 index e31d3d380..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i64_rx( - int_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c deleted file mode 100644 index bda01182e..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_i64_x( - int_fast64_t trueFunction( float16_t, bool ), - int_fast64_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f16_isNaN( genCases_f16_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c deleted file mode 100644 index fc302f7b0..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui32_rx( - uint_fast32_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c deleted file mode 100644 index 3905bd39d..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui32_x( - uint_fast32_t trueFunction( float16_t, bool ), - uint_fast32_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c deleted file mode 100644 index 9b34ae9cf..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui64_rx( - uint_fast64_t trueFunction( float16_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c deleted file mode 100644 index 2527de482..000000000 --- a/addins/TestFloat-3e/source/test_a_f16_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f16_z_ui64_x( - uint_fast64_t trueFunction( float16_t, bool ), - uint_fast64_t subjFunction( float16_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_extF80.c b/addins/TestFloat-3e/source/test_a_f32_z_extF80.c deleted file mode 100644 index 000ade09c..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_extF80( - void trueFunction( float32_t, extFloat80_t * ), - void subjFunction( float32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f128.c b/addins/TestFloat-3e/source/test_a_f32_z_f128.c deleted file mode 100644 index bc05438b8..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f128( - void trueFunction( float32_t, float128_t * ), - void subjFunction( float32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f16.c b/addins/TestFloat-3e/source/test_a_f32_z_f16.c deleted file mode 100644 index b89002c66..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f16( - float16_t trueFunction( float32_t ), float16_t subjFunction( float32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_f64.c b/addins/TestFloat-3e/source/test_a_f32_z_f64.c deleted file mode 100644 index 19267cbef..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_f64( - float64_t trueFunction( float32_t ), float64_t subjFunction( float32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c deleted file mode 100644 index d4ff4782c..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i32_rx.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i32_rx( - int_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c deleted file mode 100644 index 4883d19c8..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i32_x.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i32_x( - int_fast32_t trueFunction( float32_t, bool ), - int_fast32_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c deleted file mode 100644 index d3216bd8f..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i64_rx.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i64_rx( - int_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c deleted file mode 100644 index 4038135d0..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_i64_x.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_i64_x( - int_fast64_t trueFunction( float32_t, bool ), - int_fast64_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f32_isNaN( genCases_f32_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c deleted file mode 100644 index 9b120a589..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui32_rx.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui32_rx( - uint_fast32_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c deleted file mode 100644 index 18dc88126..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui32_x.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui32_x( - uint_fast32_t trueFunction( float32_t, bool ), - uint_fast32_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c deleted file mode 100644 index 2c792c2a1..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui64_rx.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui64_rx( - uint_fast64_t trueFunction( float32_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c deleted file mode 100644 index 7cf7c3173..000000000 --- a/addins/TestFloat-3e/source/test_a_f32_z_ui64_x.c +++ /dev/null @@ -1,98 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_f32_z_ui64_x( - uint_fast64_t trueFunction( float32_t, bool ), - uint_fast64_t subjFunction( float32_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_extF80.c b/addins/TestFloat-3e/source/test_a_f64_z_extF80.c deleted file mode 100644 index 76a69acce..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_extF80.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_extF80( - void trueFunction( float64_t, extFloat80_t * ), - void subjFunction( float64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f128.c b/addins/TestFloat-3e/source/test_a_f64_z_f128.c deleted file mode 100644 index b53a75e7e..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f128.c +++ /dev/null @@ -1,106 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT64 && defined FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f128( - void trueFunction( float64_t, float128_t * ), - void subjFunction( float64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_f64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_f64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f16.c b/addins/TestFloat-3e/source/test_a_f64_z_f16.c deleted file mode 100644 index 9f43160b4..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#if defined FLOAT16 && defined FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f16( - float16_t trueFunction( float64_t ), float16_t subjFunction( float64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_f32.c b/addins/TestFloat-3e/source/test_a_f64_z_f32.c deleted file mode 100644 index 48ece56be..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_f32( - float32_t trueFunction( float64_t ), float32_t subjFunction( float64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c deleted file mode 100644 index 9c0f5ffa7..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i32_rx.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i32_rx( - int_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - int_fast32_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c b/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c deleted file mode 100644 index 5ff5dcb7a..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i32_x.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i32_x( - int_fast32_t trueFunction( float64_t, bool ), - int_fast32_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - int_fast32_t trueZ; - uint_fast8_t trueFlags; - int_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0x7FFFFFFF) && (subjZ != -0x7FFFFFFF - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c deleted file mode 100644 index ead748726..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i64_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i64_rx( - int_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - int_fast64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c b/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c deleted file mode 100644 index 03ddce529..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_i64_x.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_i64_x( - int_fast64_t trueFunction( float64_t, bool ), - int_fast64_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - int_fast64_t trueZ; - uint_fast8_t trueFlags; - int_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != INT64_C( 0x7FFFFFFFFFFFFFFF )) - && (subjZ != -INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) - && (! f64_isNaN( genCases_f64_a ) || (subjZ != 0))) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_i64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c deleted file mode 100644 index 0aecb2243..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui32_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui32_rx( - uint_fast32_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast32_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c b/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c deleted file mode 100644 index 7bf6282bc..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui32_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui32_x( - uint_fast32_t trueFunction( float64_t, bool ), - uint_fast32_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - uint_fast32_t trueZ; - uint_fast8_t trueFlags; - uint_fast32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != 0xFFFFFFFF) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c b/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c deleted file mode 100644 index 48066f61e..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui64_rx.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui64_rx( - uint_fast64_t trueFunction( float64_t, uint_fast8_t, bool ), - uint_fast64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c b/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c deleted file mode 100644 index 65cecb460..000000000 --- a/addins/TestFloat-3e/source/test_a_f64_z_ui64_x.c +++ /dev/null @@ -1,102 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017, 2018 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_f64_z_ui64_x( - uint_fast64_t trueFunction( float64_t, bool ), - uint_fast64_t subjFunction( float64_t, bool ), - bool exact - ) -{ - int count; - uint_fast64_t trueZ; - uint_fast8_t trueFlags; - uint_fast64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkInvInts - || (trueFlags != softfloat_flag_invalid) - || (subjFlags != softfloat_flag_invalid) - || ((subjZ != UINT64_C( 0xFFFFFFFFFFFFFFFF )) && (subjZ != 0)) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, " " ); - writeCase_z_ui64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_extF80.c b/addins/TestFloat-3e/source/test_a_i32_z_extF80.c deleted file mode 100644 index deb846e64..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_extF80( - void trueFunction( int32_t, extFloat80_t * ), - void subjFunction( int32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f128.c b/addins/TestFloat-3e/source/test_a_i32_z_f128.c deleted file mode 100644 index ffb57412e..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f128( - void trueFunction( int32_t, float128_t * ), - void subjFunction( int32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f16.c b/addins/TestFloat-3e/source/test_a_i32_z_f16.c deleted file mode 100644 index 350d70460..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f16( - float16_t trueFunction( int32_t ), float16_t subjFunction( int32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f32.c b/addins/TestFloat-3e/source/test_a_i32_z_f32.c deleted file mode 100644 index cd8118aa5..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f32( - float32_t trueFunction( int32_t ), float32_t subjFunction( int32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_i32_z_f64.c b/addins/TestFloat-3e/source/test_a_i32_z_f64.c deleted file mode 100644 index f9a2feb5e..000000000 --- a/addins/TestFloat-3e/source/test_a_i32_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i32_z_f64( - float64_t trueFunction( int32_t ), float64_t subjFunction( int32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_i32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i32( genCases_i32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_extF80.c b/addins/TestFloat-3e/source/test_a_i64_z_extF80.c deleted file mode 100644 index c453ab28e..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_extF80( - void trueFunction( int64_t, extFloat80_t * ), - void subjFunction( int64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f128.c b/addins/TestFloat-3e/source/test_a_i64_z_f128.c deleted file mode 100644 index b79a75533..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f128( - void trueFunction( int64_t, float128_t * ), - void subjFunction( int64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_i64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_i64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f16.c b/addins/TestFloat-3e/source/test_a_i64_z_f16.c deleted file mode 100644 index 0f7f4e2a7..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f16( - float16_t trueFunction( int64_t ), float16_t subjFunction( int64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f32.c b/addins/TestFloat-3e/source/test_a_i64_z_f32.c deleted file mode 100644 index d5bfb0ac8..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f32( - float32_t trueFunction( int64_t ), float32_t subjFunction( int64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_i64_z_f64.c b/addins/TestFloat-3e/source/test_a_i64_z_f64.c deleted file mode 100644 index 39b07e88e..000000000 --- a/addins/TestFloat-3e/source/test_a_i64_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_i64_z_f64( - float64_t trueFunction( int64_t ), float64_t subjFunction( int64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_i64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_i64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_i64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_i64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_i64( genCases_i64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c b/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c deleted file mode 100644 index 53d9b0861..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_extF80( - void trueFunction( uint32_t, extFloat80_t * ), - void subjFunction( uint32_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f128.c b/addins/TestFloat-3e/source/test_a_ui32_z_f128.c deleted file mode 100644 index cfa43b6b0..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f128( - void trueFunction( uint32_t, float128_t * ), - void subjFunction( uint32_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui32_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui32_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f16.c b/addins/TestFloat-3e/source/test_a_ui32_z_f16.c deleted file mode 100644 index 404d1d10e..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f16( - float16_t trueFunction( uint32_t ), float16_t subjFunction( uint32_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f32.c b/addins/TestFloat-3e/source/test_a_ui32_z_f32.c deleted file mode 100644 index c9618e15a..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f32( - float32_t trueFunction( uint32_t ), float32_t subjFunction( uint32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_ui32_z_f64.c b/addins/TestFloat-3e/source/test_a_ui32_z_f64.c deleted file mode 100644 index 00876b7f1..000000000 --- a/addins/TestFloat-3e/source/test_a_ui32_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui32_z_f64( - float64_t trueFunction( uint32_t ), float64_t subjFunction( uint32_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui32( genCases_ui32_a, " " ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c b/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c deleted file mode 100644 index 4e34e2002..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_extF80.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_extF80( - void trueFunction( uint64_t, extFloat80_t * ), - void subjFunction( uint64_t, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f128.c b/addins/TestFloat-3e/source/test_a_ui64_z_f128.c deleted file mode 100644 index 81ca81cc8..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f128.c +++ /dev/null @@ -1,101 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f128( - void trueFunction( uint64_t, float128_t * ), - void subjFunction( uint64_t, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( genCases_ui64_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( genCases_ui64_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f16.c b/addins/TestFloat-3e/source/test_a_ui64_z_f16.c deleted file mode 100644 index 54e68badf..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f16.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f16( - float16_t trueFunction( uint64_t ), float16_t subjFunction( uint64_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f32.c b/addins/TestFloat-3e/source/test_a_ui64_z_f32.c deleted file mode 100644 index 98a0f5020..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f32.c +++ /dev/null @@ -1,95 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f32( - float32_t trueFunction( uint64_t ), float32_t subjFunction( uint64_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_a_ui64_z_f64.c b/addins/TestFloat-3e/source/test_a_ui64_z_f64.c deleted file mode 100644 index 2dc6c64a5..000000000 --- a/addins/TestFloat-3e/source/test_a_ui64_z_f64.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_a_ui64_z_f64( - float64_t trueFunction( uint64_t ), float64_t subjFunction( uint64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_ui64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_ui64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_ui64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_ui64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_ui64( genCases_ui64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c b/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c deleted file mode 100644 index 3270b4f9d..000000000 --- a/addins/TestFloat-3e/source/test_ab_extF80_z_bool.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_extF80_z_bool( - bool trueFunction( const extFloat80_t *, const extFloat80_t * ), - bool subjFunction( const extFloat80_t *, const extFloat80_t * ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_extF80_a, &genCases_extF80_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_extF80_a, &genCases_extF80_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (extF80M_isSignalingNaN( &genCases_extF80_a ) - || extF80M_isSignalingNaN( &genCases_extF80_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_extF80M( - &genCases_extF80_a, &genCases_extF80_b, " " ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f128_z_bool.c b/addins/TestFloat-3e/source/test_ab_f128_z_bool.c deleted file mode 100644 index 920420295..000000000 --- a/addins/TestFloat-3e/source/test_ab_f128_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f128_z_bool( - bool trueFunction( const float128_t *, const float128_t * ), - bool subjFunction( const float128_t *, const float128_t * ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f128_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( &genCases_f128_a, &genCases_f128_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( &genCases_f128_a, &genCases_f128_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f128M( &genCases_f128_a, &genCases_f128_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f16_z_bool.c b/addins/TestFloat-3e/source/test_ab_f16_z_bool.c deleted file mode 100644 index 712aa71e4..000000000 --- a/addins/TestFloat-3e/source/test_ab_f16_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f16_z_bool( - bool trueFunction( float16_t, float16_t ), - bool subjFunction( float16_t, float16_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f16_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f16( genCases_f16_a, genCases_f16_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_ab_f32_z_bool.c b/addins/TestFloat-3e/source/test_ab_f32_z_bool.c deleted file mode 100644 index 01919d5e9..000000000 --- a/addins/TestFloat-3e/source/test_ab_f32_z_bool.c +++ /dev/null @@ -1,99 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f32_z_bool( - bool trueFunction( float32_t, float32_t ), - bool subjFunction( float32_t, float32_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f32_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f32( genCases_f32_a, genCases_f32_b ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_ab_f64_z_bool.c b/addins/TestFloat-3e/source/test_ab_f64_z_bool.c deleted file mode 100644 index 599b2bf46..000000000 --- a/addins/TestFloat-3e/source/test_ab_f64_z_bool.c +++ /dev/null @@ -1,103 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_ab_f64_z_bool( - bool trueFunction( float64_t, float64_t ), - bool subjFunction( float64_t, float64_t ) - ) -{ - int count; - bool trueZ; - uint_fast8_t trueFlags; - bool subjZ; - uint_fast8_t subjFlags; - - genCases_f64_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( (trueZ != subjZ) || (trueFlags != subjFlags) ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f64( genCases_f64_a, genCases_f64_b, " " ); - writeCase_z_bool( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f128.c b/addins/TestFloat-3e/source/test_abcz_f128.c deleted file mode 100644 index 94f5bc06c..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f128.c +++ /dev/null @@ -1,125 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f128( - void - trueFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ), - void - subjFunction( - const float128_t *, - const float128_t *, - const float128_t *, - float128_t * - ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b ) - || f128M_isSignalingNaN( &genCases_f128_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f128M( - &genCases_f128_a, &genCases_f128_b, &genCases_f128_c ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f16.c b/addins/TestFloat-3e/source/test_abcz_f16.c deleted file mode 100644 index 6469cb4a3..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f16.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f16( - float16_t trueFunction( float16_t, float16_t, float16_t ), - float16_t subjFunction( float16_t, float16_t, float16_t ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b, genCases_f16_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b ) - || f16_isSignalingNaN( genCases_f16_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f16( - genCases_f16_a, genCases_f16_b, genCases_f16_c ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abcz_f32.c b/addins/TestFloat-3e/source/test_abcz_f32.c deleted file mode 100644 index 48ae071b2..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f32.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f32( - float32_t trueFunction( float32_t, float32_t, float32_t ), - float32_t subjFunction( float32_t, float32_t, float32_t ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b, genCases_f32_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b ) - || f32_isSignalingNaN( genCases_f32_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f32( - genCases_f32_a, genCases_f32_b, genCases_f32_c ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_abcz_f64.c b/addins/TestFloat-3e/source/test_abcz_f64.c deleted file mode 100644 index 36626a511..000000000 --- a/addins/TestFloat-3e/source/test_abcz_f64.c +++ /dev/null @@ -1,111 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_abcz_f64( - float64_t trueFunction( float64_t, float64_t, float64_t ), - float64_t subjFunction( float64_t, float64_t, float64_t ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_abc_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_abc_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b, genCases_f64_c ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && ( f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b ) - || f64_isSignalingNaN( genCases_f64_c ) - ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_abc_f64( - genCases_f64_a, genCases_f64_b, genCases_f64_c ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_extF80.c b/addins/TestFloat-3e/source/test_abz_extF80.c deleted file mode 100644 index c4239f07d..000000000 --- a/addins/TestFloat-3e/source/test_abz_extF80.c +++ /dev/null @@ -1,113 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_extF80( - void - trueFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ), - void - subjFunction( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &genCases_extF80_b, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &genCases_extF80_b, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (extF80M_isSignalingNaN( &genCases_extF80_a ) - || extF80M_isSignalingNaN( &genCases_extF80_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_extF80M( - &genCases_extF80_a, &genCases_extF80_b, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f128.c b/addins/TestFloat-3e/source/test_abz_f128.c deleted file mode 100644 index 6fe68415e..000000000 --- a/addins/TestFloat-3e/source/test_abz_f128.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f128( - void trueFunction( const float128_t *, const float128_t *, float128_t * ), - void subjFunction( const float128_t *, const float128_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &genCases_f128_b, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &genCases_f128_b, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f128M_isSignalingNaN( &genCases_f128_a ) - || f128M_isSignalingNaN( &genCases_f128_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f128M( &genCases_f128_a, &genCases_f128_b ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f16.c b/addins/TestFloat-3e/source/test_abz_f16.c deleted file mode 100644 index cc5e9436f..000000000 --- a/addins/TestFloat-3e/source/test_abz_f16.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f16( - float16_t trueFunction( float16_t, float16_t ), - float16_t subjFunction( float16_t, float16_t ) - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, genCases_f16_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, genCases_f16_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f16_isSignalingNaN( genCases_f16_a ) - || f16_isSignalingNaN( genCases_f16_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f16( genCases_f16_a, genCases_f16_b ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_abz_f32.c b/addins/TestFloat-3e/source/test_abz_f32.c deleted file mode 100644 index cd595b6c9..000000000 --- a/addins/TestFloat-3e/source/test_abz_f32.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f32( - float32_t trueFunction( float32_t, float32_t ), - float32_t subjFunction( float32_t, float32_t ) - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, genCases_f32_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, genCases_f32_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f32_isSignalingNaN( genCases_f32_a ) - || f32_isSignalingNaN( genCases_f32_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f32( genCases_f32_a, genCases_f32_b ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_abz_f64.c b/addins/TestFloat-3e/source/test_abz_f64.c deleted file mode 100644 index f54b90350..000000000 --- a/addins/TestFloat-3e/source/test_abz_f64.c +++ /dev/null @@ -1,108 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_abz_f64( - float64_t trueFunction( float64_t, float64_t ), - float64_t subjFunction( float64_t, float64_t ) - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_ab_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_ab_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, genCases_f64_b ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, genCases_f64_b ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && (f64_isSignalingNaN( genCases_f64_a ) - || f64_isSignalingNaN( genCases_f64_b )) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_ab_f64( genCases_f64_a, genCases_f64_b, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_extF80.c b/addins/TestFloat-3e/source/test_az_extF80.c deleted file mode 100644 index e1e6a4618..000000000 --- a/addins/TestFloat-3e/source/test_az_extF80.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_az_extF80( - void trueFunction( const extFloat80_t *, extFloat80_t * ), - void subjFunction( const extFloat80_t *, extFloat80_t * ) - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_extF80_rx.c b/addins/TestFloat-3e/source/test_az_extF80_rx.c deleted file mode 100644 index 91a7cbad2..000000000 --- a/addins/TestFloat-3e/source/test_az_extF80_rx.c +++ /dev/null @@ -1,112 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef EXTFLOAT80 - -#pragma STDC FENV_ACCESS ON - -void - test_az_extF80_rx( - void - trueFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - void - subjFunction( const extFloat80_t *, uint_fast8_t, bool, extFloat80_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - extFloat80_t trueZ; - uint_fast8_t trueFlags; - extFloat80_t subjZ; - uint_fast8_t subjFlags; - - genCases_extF80_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_extF80_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_extF80_a, roundingMode, exact, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_extF80_a, roundingMode, exact, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! extF80M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && extF80M_isSignalingNaN( &genCases_extF80_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! extF80M_isNaN( &trueZ ) - || ! extF80M_isNaN( &subjZ ) - || extF80M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_extF80M( &genCases_extF80_a, "\n\t" ); - writeCase_z_extF80M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f128.c b/addins/TestFloat-3e/source/test_az_f128.c deleted file mode 100644 index f10e7415d..000000000 --- a/addins/TestFloat-3e/source/test_az_f128.c +++ /dev/null @@ -1,107 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f128( - void trueFunction( const float128_t *, float128_t * ), - void subjFunction( const float128_t *, float128_t * ) - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f128_rx.c b/addins/TestFloat-3e/source/test_az_f128_rx.c deleted file mode 100644 index 9c93e8a0a..000000000 --- a/addins/TestFloat-3e/source/test_az_f128_rx.c +++ /dev/null @@ -1,110 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT128 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f128_rx( - void trueFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - void subjFunction( const float128_t *, uint_fast8_t, bool, float128_t * ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float128_t trueZ; - uint_fast8_t trueFlags; - float128_t subjZ; - uint_fast8_t subjFlags; - - genCases_f128_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f128_a_next(); - *testLoops_trueFlagsPtr = 0; - trueFunction( &genCases_f128_a, roundingMode, exact, &trueZ ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjFunction( &genCases_f128_a, roundingMode, exact, &subjZ ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f128M_same( &trueZ, &subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs - && f128M_isSignalingNaN( &genCases_f128_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f128M_isNaN( &trueZ ) - || ! f128M_isNaN( &subjZ ) - || f128M_isSignalingNaN( &subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f128M( &genCases_f128_a, " " ); - writeCase_z_f128M( &trueZ, trueFlags, &subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f16.c b/addins/TestFloat-3e/source/test_az_f16.c deleted file mode 100644 index ef9f45a5e..000000000 --- a/addins/TestFloat-3e/source/test_az_f16.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f16( - float16_t trueFunction( float16_t ), float16_t subjFunction( float16_t ) ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f16_rx.c b/addins/TestFloat-3e/source/test_az_f16_rx.c deleted file mode 100644 index 11c37e832..000000000 --- a/addins/TestFloat-3e/source/test_az_f16_rx.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT16 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f16_rx( - float16_t trueFunction( float16_t, uint_fast8_t, bool ), - float16_t subjFunction( float16_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float16_t trueZ; - uint_fast8_t trueFlags; - float16_t subjZ; - uint_fast8_t subjFlags; - - genCases_f16_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f16_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f16_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f16_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f16_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f16_isSignalingNaN( genCases_f16_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f16_isNaN( trueZ ) - || ! f16_isNaN( subjZ ) - || f16_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f16( genCases_f16_a ); - writeCase_z_f16( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f32.c b/addins/TestFloat-3e/source/test_az_f32.c deleted file mode 100644 index 499c07b58..000000000 --- a/addins/TestFloat-3e/source/test_az_f32.c +++ /dev/null @@ -1,100 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_az_f32( - float32_t trueFunction( float32_t ), float32_t subjFunction( float32_t ) ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_az_f32_rx.c b/addins/TestFloat-3e/source/test_az_f32_rx.c deleted file mode 100644 index 5aeecaaf3..000000000 --- a/addins/TestFloat-3e/source/test_az_f32_rx.c +++ /dev/null @@ -1,105 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014 The Regents of the University of California. -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#pragma STDC FENV_ACCESS ON - -void - test_az_f32_rx( - float32_t trueFunction( float32_t, uint_fast8_t, bool ), - float32_t subjFunction( float32_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float32_t trueZ; - uint_fast8_t trueFlags; - float32_t subjZ; - uint_fast8_t subjFlags; - - genCases_f32_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f32_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f32_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f32_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f32_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f32_isSignalingNaN( genCases_f32_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f32_isNaN( trueZ ) - || ! f32_isNaN( subjZ ) - || f32_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f32( genCases_f32_a, " " ); - writeCase_z_f32( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - diff --git a/addins/TestFloat-3e/source/test_az_f64.c b/addins/TestFloat-3e/source/test_az_f64.c deleted file mode 100644 index 24963142b..000000000 --- a/addins/TestFloat-3e/source/test_az_f64.c +++ /dev/null @@ -1,104 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f64( - float64_t trueFunction( float64_t ), float64_t subjFunction( float64_t ) ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/test_az_f64_rx.c b/addins/TestFloat-3e/source/test_az_f64_rx.c deleted file mode 100644 index c146c7320..000000000 --- a/addins/TestFloat-3e/source/test_az_f64_rx.c +++ /dev/null @@ -1,109 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2017 The Regents of the University of -California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include "platform.h" -#include "softfloat.h" -#include "genCases.h" -#include "verCases.h" -#include "writeCase.h" -#include "testLoops.h" - -#ifdef FLOAT64 - -#pragma STDC FENV_ACCESS ON - -void - test_az_f64_rx( - float64_t trueFunction( float64_t, uint_fast8_t, bool ), - float64_t subjFunction( float64_t, uint_fast8_t, bool ), - uint_fast8_t roundingMode, - bool exact - ) -{ - int count; - float64_t trueZ; - uint_fast8_t trueFlags; - float64_t subjZ; - uint_fast8_t subjFlags; - - genCases_f64_a_init(); - genCases_writeTestsTotal( testLoops_forever ); - verCases_errorCount = 0; - verCases_tenThousandsCount = 0; - count = 10000; - while ( ! genCases_done || testLoops_forever ) { - genCases_f64_a_next(); - *testLoops_trueFlagsPtr = 0; - trueZ = trueFunction( genCases_f64_a, roundingMode, exact ); - trueFlags = *testLoops_trueFlagsPtr; - testLoops_subjFlagsFunction(); - subjZ = subjFunction( genCases_f64_a, roundingMode, exact ); - subjFlags = testLoops_subjFlagsFunction(); - --count; - if ( ! count ) { - verCases_perTenThousand(); - count = 10000; - } - if ( ! f64_same( trueZ, subjZ ) || (trueFlags != subjFlags) ) { - if ( - ! verCases_checkNaNs && f64_isSignalingNaN( genCases_f64_a ) - ) { - trueFlags |= softfloat_flag_invalid; - } - if ( - verCases_checkNaNs - || ! f64_isNaN( trueZ ) - || ! f64_isNaN( subjZ ) - || f64_isSignalingNaN( subjZ ) - || (trueFlags != subjFlags) - ) { - ++verCases_errorCount; - verCases_writeErrorFound( 10000 - count ); - writeCase_a_f64( genCases_f64_a, "\n\t" ); - writeCase_z_f64( trueZ, trueFlags, subjZ, subjFlags ); - if ( verCases_errorCount == verCases_maxErrorCount ) break; - } - } - } - verCases_writeTestsPerformed( 10000 - count ); - -} - -#endif - diff --git a/addins/TestFloat-3e/source/testfloat.c b/addins/TestFloat-3e/source/testfloat.c deleted file mode 100644 index f83ca6d60..000000000 --- a/addins/TestFloat-3e/source/testfloat.c +++ /dev/null @@ -1,1715 +0,0 @@ - -/*============================================================================ - -This C source file is part of TestFloat, Release 3e, a package of programs for -testing the correctness of floating-point arithmetic complying with the IEEE -Standard for Floating-Point, by John R. Hauser. - -Copyright 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018 The Regents of the -University of California. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions, and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions, and the following disclaimer in the documentation - and/or other materials provided with the distribution. - - 3. Neither the name of the University nor the names of its contributors may - be used to endorse or promote products derived from this software without - specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS", AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -=============================================================================*/ - -#include -#include -#include -#include -#include -#include -#include "platform.h" -#include "fail.h" -#include "softfloat.h" -#include "subjfloat_config.h" -#include "subjfloat.h" -#include "functions.h" -#include "genCases.h" -#include "verCases.h" -#include "testLoops.h" - -static void catchSIGINT( int signalCode ) -{ - - if ( verCases_stop ) exit( EXIT_FAILURE ); - verCases_stop = true; - -} - -static void (*subjFunctionPtr)(); - -#ifdef FLOAT16 -typedef float16_t funcType_a_ui32_z_f16( uint32_t ); -#endif -typedef float32_t funcType_a_ui32_z_f32( uint32_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_ui32_z_f64( uint32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_ui32_z_extF80( uint32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_ui32_z_f128( uint32_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_ui64_z_f16( uint64_t ); -#endif -typedef float32_t funcType_a_ui64_z_f32( uint64_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_ui64_z_f64( uint64_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_ui64_z_extF80( uint64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_ui64_z_f128( uint64_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_i32_z_f16( int32_t ); -#endif -typedef float32_t funcType_a_i32_z_f32( int32_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_i32_z_f64( int32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_i32_z_extF80( int32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_i32_z_f128( int32_t, float128_t * ); -#endif -#ifdef FLOAT16 -typedef float16_t funcType_a_i64_z_f16( int64_t ); -#endif -typedef float32_t funcType_a_i64_z_f32( int64_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_i64_z_f64( int64_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_i64_z_extF80( int64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_i64_z_f128( int64_t, float128_t * ); -#endif - -#ifdef FLOAT16 -typedef uint_fast32_t funcType_a_f16_z_ui32( float16_t ); -typedef uint_fast64_t funcType_a_f16_z_ui64( float16_t ); -typedef int_fast32_t funcType_a_f16_z_i32( float16_t ); -typedef int_fast64_t funcType_a_f16_z_i64( float16_t ); -typedef float32_t funcType_a_f16_z_f32( float16_t ); -#ifdef FLOAT64 -typedef float64_t funcType_a_f16_z_f64( float16_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f16_z_extF80( float16_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f16_z_f128( float16_t, float128_t * ); -#endif -typedef float16_t funcType_az_f16( float16_t ); -typedef float16_t funcType_abz_f16( float16_t, float16_t ); -typedef float16_t funcType_abcz_f16( float16_t, float16_t, float16_t ); -typedef bool funcType_ab_f16_z_bool( float16_t, float16_t ); -#endif - -typedef uint_fast32_t funcType_a_f32_z_ui32( float32_t ); -typedef uint_fast64_t funcType_a_f32_z_ui64( float32_t ); -typedef int_fast32_t funcType_a_f32_z_i32( float32_t ); -typedef int_fast64_t funcType_a_f32_z_i64( float32_t ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f32_z_f16( float32_t ); -#endif -#ifdef FLOAT64 -typedef float64_t funcType_a_f32_z_f64( float32_t ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f32_z_extF80( float32_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f32_z_f128( float32_t, float128_t * ); -#endif -typedef float32_t funcType_az_f32( float32_t ); -typedef float32_t funcType_abz_f32( float32_t, float32_t ); -typedef float32_t funcType_abcz_f32( float32_t, float32_t, float32_t ); -typedef bool funcType_ab_f32_z_bool( float32_t, float32_t ); - -#ifdef FLOAT64 -typedef uint_fast32_t funcType_a_f64_z_ui32( float64_t ); -typedef uint_fast64_t funcType_a_f64_z_ui64( float64_t ); -typedef int_fast32_t funcType_a_f64_z_i32( float64_t ); -typedef int_fast64_t funcType_a_f64_z_i64( float64_t ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f64_z_f16( float64_t ); -#endif -typedef float32_t funcType_a_f64_z_f32( float64_t ); -#ifdef EXTFLOAT80 -typedef void funcType_a_f64_z_extF80( float64_t, extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_f64_z_f128( float64_t, float128_t * ); -#endif -typedef float64_t funcType_az_f64( float64_t ); -typedef float64_t funcType_abz_f64( float64_t, float64_t ); -typedef float64_t funcType_abcz_f64( float64_t, float64_t, float64_t ); -typedef bool funcType_ab_f64_z_bool( float64_t, float64_t ); -#endif - -#ifdef EXTFLOAT80 -typedef uint_fast32_t funcType_a_extF80_z_ui32( const extFloat80_t * ); -typedef uint_fast64_t funcType_a_extF80_z_ui64( const extFloat80_t * ); -typedef int_fast32_t funcType_a_extF80_z_i32( const extFloat80_t * ); -typedef int_fast64_t funcType_a_extF80_z_i64( const extFloat80_t * ); -#ifdef FLOAT16 -typedef float16_t funcType_a_extF80_z_f16( const extFloat80_t * ); -#endif -typedef float32_t funcType_a_extF80_z_f32( const extFloat80_t * ); -#ifdef FLOAT64 -typedef float64_t funcType_a_extF80_z_f64( const extFloat80_t * ); -#endif -#ifdef FLOAT128 -typedef void funcType_a_extF80_z_f128( const extFloat80_t *, float128_t * ); -#endif -typedef void funcType_az_extF80( const extFloat80_t *, extFloat80_t * ); -typedef - void - funcType_abz_extF80( - const extFloat80_t *, const extFloat80_t *, extFloat80_t * ); -typedef - bool funcType_ab_extF80_z_bool( const extFloat80_t *, const extFloat80_t * ); -#endif - -#ifdef FLOAT128 -typedef uint_fast32_t funcType_a_f128_z_ui32( const float128_t * ); -typedef uint_fast64_t funcType_a_f128_z_ui64( const float128_t * ); -typedef int_fast32_t funcType_a_f128_z_i32( const float128_t * ); -typedef int_fast64_t funcType_a_f128_z_i64( const float128_t * ); -#ifdef FLOAT16 -typedef float16_t funcType_a_f128_z_f16( const float128_t * ); -#endif -typedef float32_t funcType_a_f128_z_f32( const float128_t * ); -#ifdef FLOAT64 -typedef float64_t funcType_a_f128_z_f64( const float128_t * ); -#endif -#ifdef EXTFLOAT80 -typedef void funcType_a_f128_z_extF80( const float128_t *, extFloat80_t * ); -#endif -typedef void funcType_az_f128( const float128_t *, float128_t * ); -typedef - void - funcType_abz_f128( const float128_t *, const float128_t *, float128_t * ); -typedef - void - funcType_abcz_f128( - const float128_t *, const float128_t *, const float128_t *, float128_t * - ); -typedef bool funcType_ab_f128_z_bool( const float128_t *, const float128_t * ); -#endif - -#ifdef FLOAT16 - -static -uint_fast32_t - subjFunction_a_f16_z_ui32_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f16_z_ui64_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f16_z_i32_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f16_z_i64_rx( - float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f16_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float16_t - subjFunction_az_f16_rx( float16_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f16 *) subjFunctionPtr)( a ); - -} - -#endif - -static -uint_fast32_t - subjFunction_a_f32_z_ui32_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f32_z_ui64_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f32_z_i32_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f32_z_i64_rx( - float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f32_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float32_t - subjFunction_az_f32_rx( float32_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f32 *) subjFunctionPtr)( a ); - -} - -#ifdef FLOAT64 - -static -uint_fast32_t - subjFunction_a_f64_z_ui32_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_ui32 *) subjFunctionPtr)( a ); - -} - -static -uint_fast64_t - subjFunction_a_f64_z_ui64_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_ui64 *) subjFunctionPtr)( a ); - -} - -static -int_fast32_t - subjFunction_a_f64_z_i32_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_i32 *) subjFunctionPtr)( a ); - -} - -static -int_fast64_t - subjFunction_a_f64_z_i64_rx( - float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f64_z_i64 *) subjFunctionPtr)( a ); - -} - -static -float64_t - subjFunction_az_f64_rx( float64_t a, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_az_f64 *) subjFunctionPtr)( a ); - -} - -#endif - -#ifdef EXTFLOAT80 - -static -uint_fast32_t - subjFunction_a_extF80_z_ui32_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_ui32 *) subjFunctionPtr)( aPtr ); - -} - -static -uint_fast64_t - subjFunction_a_extF80_z_ui64_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_ui64 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast32_t - subjFunction_a_extF80_z_i32_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_i32 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast64_t - subjFunction_a_extF80_z_i64_rx( - const extFloat80_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_extF80_z_i64 *) subjFunctionPtr)( aPtr ); - -} - -static -void - subjFunction_az_extF80_rx( - const extFloat80_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - extFloat80_t *zPtr - ) -{ - - return ((funcType_az_extF80 *) subjFunctionPtr)( aPtr, zPtr ); - -} - -#endif - -#ifdef FLOAT128 - -static -uint_fast32_t - subjFunction_a_f128_z_ui32_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_ui32 *) subjFunctionPtr)( aPtr ); - -} - -static -uint_fast64_t - subjFunction_a_f128_z_ui64_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_ui64 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast32_t - subjFunction_a_f128_z_i32_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_i32 *) subjFunctionPtr)( aPtr ); - -} - -static -int_fast64_t - subjFunction_a_f128_z_i64_rx( - const float128_t *aPtr, uint_fast8_t roundingMode, bool exact ) -{ - - return ((funcType_a_f128_z_i64 *) subjFunctionPtr)( aPtr ); - -} - -static -void - subjFunction_az_f128_rx( - const float128_t *aPtr, - uint_fast8_t roundingMode, - bool exact, - float128_t *zPtr - ) -{ - - return ((funcType_az_f128 *) subjFunctionPtr)( aPtr, zPtr ); - -} - -#endif - -static -void - testFunctionInstance( - int functionCode, uint_fast8_t roundingMode, bool exact ) -{ -#ifdef FLOAT16 - funcType_abz_f16 *trueFunction_abz_f16; - funcType_ab_f16_z_bool *trueFunction_ab_f16_z_bool; -#endif - funcType_abz_f32 *trueFunction_abz_f32; - funcType_ab_f32_z_bool *trueFunction_ab_f32_z_bool; -#ifdef FLOAT64 - funcType_abz_f64 *trueFunction_abz_f64; - funcType_ab_f64_z_bool *trueFunction_ab_f64_z_bool; -#endif -#ifdef EXTFLOAT80 - funcType_abz_extF80 *trueFunction_abz_extF80; - funcType_ab_extF80_z_bool *trueFunction_ab_extF80_z_bool; -#endif -#ifdef FLOAT128 - funcType_abz_f128 *trueFunction_abz_f128; - funcType_ab_f128_z_bool *trueFunction_ab_f128_z_bool; -#endif - - fputs( "Testing ", stderr ); - verCases_writeFunctionName( stderr ); - fputs( ".\n", stderr ); - switch ( functionCode ) { - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT16 -#ifdef SUBJ_UI32_TO_F16 - case UI32_TO_F16: - test_a_ui32_z_f16( - ui32_to_f16, (funcType_a_ui32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_UI32_TO_F32 - case UI32_TO_F32: - test_a_ui32_z_f32( - ui32_to_f32, (funcType_a_ui32_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI32_TO_F64 - case UI32_TO_F64: - test_a_ui32_z_f64( - ui32_to_f64, (funcType_a_ui32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI32_TO_EXTF80 - case UI32_TO_EXTF80: - test_a_ui32_z_extF80( - ui32_to_extF80M, (funcType_a_ui32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI32_TO_F128 - case UI32_TO_F128: - test_a_ui32_z_f128( - ui32_to_f128M, (funcType_a_ui32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_UI64_TO_F16 - case UI64_TO_F16: - test_a_ui64_z_f16( - ui64_to_f16, (funcType_a_ui64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_UI64_TO_F32 - case UI64_TO_F32: - test_a_ui64_z_f32( - ui64_to_f32, (funcType_a_ui64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_UI64_TO_F64 - case UI64_TO_F64: - test_a_ui64_z_f64( - ui64_to_f64, (funcType_a_ui64_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_UI64_TO_EXTF80 - case UI64_TO_EXTF80: - test_a_ui64_z_extF80( - ui64_to_extF80M, (funcType_a_ui64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_UI64_TO_F128 - case UI64_TO_F128: - test_a_ui64_z_f128( - ui64_to_f128M, (funcType_a_ui64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I32_TO_F16 - case I32_TO_F16: - test_a_i32_z_f16( - i32_to_f16, (funcType_a_i32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_I32_TO_F32 - case I32_TO_F32: - test_a_i32_z_f32( - i32_to_f32, (funcType_a_i32_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I32_TO_F64 - case I32_TO_F64: - test_a_i32_z_f64( - i32_to_f64, (funcType_a_i32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I32_TO_EXTF80 - case I32_TO_EXTF80: - test_a_i32_z_extF80( - i32_to_extF80M, (funcType_a_i32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I32_TO_F128 - case I32_TO_F128: - test_a_i32_z_f128( - i32_to_f128M, (funcType_a_i32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT16 -#ifdef SUBJ_I64_TO_F16 - case I64_TO_F16: - test_a_i64_z_f16( - i64_to_f16, (funcType_a_i64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_I64_TO_F32 - case I64_TO_F32: - test_a_i64_z_f32( - i64_to_f32, (funcType_a_i64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_I64_TO_F64 - case I64_TO_F64: - test_a_i64_z_f64( - i64_to_f64, (funcType_a_i64_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_I64_TO_EXTF80 - case I64_TO_EXTF80: - test_a_i64_z_extF80( - i64_to_extF80M, (funcType_a_i64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_I64_TO_F128 - case I64_TO_F128: - test_a_i64_z_f128( - i64_to_f128M, (funcType_a_i64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT16 - case F16_TO_UI32: - test_a_f16_z_ui32_rx( - f16_to_ui32, subjFunction_a_f16_z_ui32_rx, roundingMode, exact ); - break; - case F16_TO_UI64: - test_a_f16_z_ui64_rx( - f16_to_ui64, subjFunction_a_f16_z_ui64_rx, roundingMode, exact ); - break; - case F16_TO_I32: - test_a_f16_z_i32_rx( - f16_to_i32, subjFunction_a_f16_z_i32_rx, roundingMode, exact ); - break; - case F16_TO_I64: - test_a_f16_z_i64_rx( - f16_to_i64, subjFunction_a_f16_z_i64_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F16_TO_F32 - case F16_TO_F32: - test_a_f16_z_f32( - f16_to_f32, (funcType_a_f16_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F16_TO_F64 - case F16_TO_F64: - test_a_f16_z_f64( - f16_to_f64, (funcType_a_f16_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F16_TO_EXTF80 - case F16_TO_EXTF80: - test_a_f16_z_extF80( - f16_to_extF80M, (funcType_a_f16_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F16_TO_F128 - case F16_TO_F128: - test_a_f16_z_f128( - f16_to_f128M, (funcType_a_f16_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F16_ROUNDTOINT: - test_az_f16_rx( - f16_roundToInt, subjFunction_az_f16_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F16_ADD - case F16_ADD: - trueFunction_abz_f16 = f16_add; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_SUB - case F16_SUB: - trueFunction_abz_f16 = f16_sub; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_MUL - case F16_MUL: - trueFunction_abz_f16 = f16_mul; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_MULADD - case F16_MULADD: - test_abcz_f16( f16_mulAdd, (funcType_abcz_f16 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F16_DIV - case F16_DIV: - trueFunction_abz_f16 = f16_div; - goto test_abz_f16; -#endif -#ifdef SUBJ_F16_REM - case F16_REM: - trueFunction_abz_f16 = f16_rem; - goto test_abz_f16; -#endif - test_abz_f16: - test_abz_f16( - trueFunction_abz_f16, (funcType_abz_f16 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F16_SQRT - case F16_SQRT: - test_az_f16( f16_sqrt, (funcType_az_f16 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F16_EQ - case F16_EQ: - trueFunction_ab_f16_z_bool = f16_eq; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LE - case F16_LE: - trueFunction_ab_f16_z_bool = f16_le; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LT - case F16_LT: - trueFunction_ab_f16_z_bool = f16_lt; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_EQ_SIGNALING - case F16_EQ_SIGNALING: - trueFunction_ab_f16_z_bool = f16_eq_signaling; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LE_QUIET - case F16_LE_QUIET: - trueFunction_ab_f16_z_bool = f16_le_quiet; - goto test_ab_f16_z_bool; -#endif -#ifdef SUBJ_F16_LT_QUIET - case F16_LT_QUIET: - trueFunction_ab_f16_z_bool = f16_lt_quiet; - goto test_ab_f16_z_bool; -#endif - test_ab_f16_z_bool: - test_ab_f16_z_bool( - trueFunction_ab_f16_z_bool, - (funcType_ab_f16_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ - case F32_TO_UI32: - test_a_f32_z_ui32_rx( - f32_to_ui32, subjFunction_a_f32_z_ui32_rx, roundingMode, exact ); - break; - case F32_TO_UI64: - test_a_f32_z_ui64_rx( - f32_to_ui64, subjFunction_a_f32_z_ui64_rx, roundingMode, exact ); - break; - case F32_TO_I32: - test_a_f32_z_i32_rx( - f32_to_i32, subjFunction_a_f32_z_i32_rx, roundingMode, exact ); - break; - case F32_TO_I64: - test_a_f32_z_i64_rx( - f32_to_i64, subjFunction_a_f32_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F32_TO_F16 - case F32_TO_F16: - test_a_f32_z_f16( - f32_to_f16, (funcType_a_f32_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F32_TO_F64 - case F32_TO_F64: - test_a_f32_z_f64( - f32_to_f64, (funcType_a_f32_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F32_TO_EXTF80 - case F32_TO_EXTF80: - test_a_f32_z_extF80( - f32_to_extF80M, (funcType_a_f32_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F32_TO_F128 - case F32_TO_F128: - test_a_f32_z_f128( - f32_to_f128M, (funcType_a_f32_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F32_ROUNDTOINT: - test_az_f32_rx( - f32_roundToInt, subjFunction_az_f32_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F32_ADD - case F32_ADD: - trueFunction_abz_f32 = f32_add; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_SUB - case F32_SUB: - trueFunction_abz_f32 = f32_sub; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_MUL - case F32_MUL: - trueFunction_abz_f32 = f32_mul; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_MULADD - case F32_MULADD: - test_abcz_f32( f32_mulAdd, (funcType_abcz_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F32_DIV - case F32_DIV: - trueFunction_abz_f32 = f32_div; - goto test_abz_f32; -#endif -#ifdef SUBJ_F32_REM - case F32_REM: - trueFunction_abz_f32 = f32_rem; - goto test_abz_f32; -#endif - test_abz_f32: - test_abz_f32( - trueFunction_abz_f32, (funcType_abz_f32 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F32_SQRT - case F32_SQRT: - test_az_f32( f32_sqrt, (funcType_az_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F32_EQ - case F32_EQ: - trueFunction_ab_f32_z_bool = f32_eq; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LE - case F32_LE: - trueFunction_ab_f32_z_bool = f32_le; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LT - case F32_LT: - trueFunction_ab_f32_z_bool = f32_lt; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_EQ_SIGNALING - case F32_EQ_SIGNALING: - trueFunction_ab_f32_z_bool = f32_eq_signaling; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LE_QUIET - case F32_LE_QUIET: - trueFunction_ab_f32_z_bool = f32_le_quiet; - goto test_ab_f32_z_bool; -#endif -#ifdef SUBJ_F32_LT_QUIET - case F32_LT_QUIET: - trueFunction_ab_f32_z_bool = f32_lt_quiet; - goto test_ab_f32_z_bool; -#endif - test_ab_f32_z_bool: - test_ab_f32_z_bool( - trueFunction_ab_f32_z_bool, - (funcType_ab_f32_z_bool *) subjFunctionPtr - ); - break; - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT64 - case F64_TO_UI32: - test_a_f64_z_ui32_rx( - f64_to_ui32, subjFunction_a_f64_z_ui32_rx, roundingMode, exact ); - break; - case F64_TO_UI64: - test_a_f64_z_ui64_rx( - f64_to_ui64, subjFunction_a_f64_z_ui64_rx, roundingMode, exact ); - break; - case F64_TO_I32: - test_a_f64_z_i32_rx( - f64_to_i32, subjFunction_a_f64_z_i32_rx, roundingMode, exact ); - break; - case F64_TO_I64: - test_a_f64_z_i64_rx( - f64_to_i64, subjFunction_a_f64_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F64_TO_F16 - case F64_TO_F16: - test_a_f64_z_f16( - f64_to_f16, (funcType_a_f64_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_F64_TO_F32 - case F64_TO_F32: - test_a_f64_z_f32( - f64_to_f32, (funcType_a_f64_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F64_TO_EXTF80 - case F64_TO_EXTF80: - test_a_f64_z_extF80( - f64_to_extF80M, (funcType_a_f64_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_F64_TO_F128 - case F64_TO_F128: - test_a_f64_z_f128( - f64_to_f128M, (funcType_a_f64_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case F64_ROUNDTOINT: - test_az_f64_rx( - f64_roundToInt, subjFunction_az_f64_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F64_ADD - case F64_ADD: - trueFunction_abz_f64 = f64_add; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_SUB - case F64_SUB: - trueFunction_abz_f64 = f64_sub; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_MUL - case F64_MUL: - trueFunction_abz_f64 = f64_mul; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_MULADD - case F64_MULADD: - test_abcz_f64( f64_mulAdd, (funcType_abcz_f64 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F64_DIV - case F64_DIV: - trueFunction_abz_f64 = f64_div; - goto test_abz_f64; -#endif -#ifdef SUBJ_F64_REM - case F64_REM: - trueFunction_abz_f64 = f64_rem; - goto test_abz_f64; -#endif - test_abz_f64: - test_abz_f64( - trueFunction_abz_f64, (funcType_abz_f64 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F64_SQRT - case F64_SQRT: - test_az_f64( f64_sqrt, (funcType_az_f64 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F64_EQ - case F64_EQ: - trueFunction_ab_f64_z_bool = f64_eq; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LE - case F64_LE: - trueFunction_ab_f64_z_bool = f64_le; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LT - case F64_LT: - trueFunction_ab_f64_z_bool = f64_lt; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_EQ_SIGNALING - case F64_EQ_SIGNALING: - trueFunction_ab_f64_z_bool = f64_eq_signaling; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LE_QUIET - case F64_LE_QUIET: - trueFunction_ab_f64_z_bool = f64_le_quiet; - goto test_ab_f64_z_bool; -#endif -#ifdef SUBJ_F64_LT_QUIET - case F64_LT_QUIET: - trueFunction_ab_f64_z_bool = f64_lt_quiet; - goto test_ab_f64_z_bool; -#endif - test_ab_f64_z_bool: - test_ab_f64_z_bool( - trueFunction_ab_f64_z_bool, - (funcType_ab_f64_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef EXTFLOAT80 - case EXTF80_TO_UI32: - test_a_extF80_z_ui32_rx( - extF80M_to_ui32, - subjFunction_a_extF80_z_ui32_rx, - roundingMode, - exact - ); - break; - case EXTF80_TO_UI64: - test_a_extF80_z_ui64_rx( - extF80M_to_ui64, - subjFunction_a_extF80_z_ui64_rx, - roundingMode, - exact - ); - break; - case EXTF80_TO_I32: - test_a_extF80_z_i32_rx( - extF80M_to_i32, subjFunction_a_extF80_z_i32_rx, roundingMode, exact - ); - break; - case EXTF80_TO_I64: - test_a_extF80_z_i64_rx( - extF80M_to_i64, subjFunction_a_extF80_z_i64_rx, roundingMode, exact - ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_EXTF80_TO_F16 - case EXTF80_TO_F16: - test_a_extF80_z_f16( - extF80M_to_f16, (funcType_a_extF80_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_EXTF80_TO_F32 - case EXTF80_TO_F32: - test_a_extF80_z_f32( - extF80M_to_f32, (funcType_a_extF80_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_EXTF80_TO_F64 - case EXTF80_TO_F64: - test_a_extF80_z_f64( - extF80M_to_f64, (funcType_a_extF80_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef FLOAT128 -#ifdef SUBJ_EXTF80_TO_F128 - case EXTF80_TO_F128: - test_a_extF80_z_f128( - extF80M_to_f128M, (funcType_a_extF80_z_f128 *) subjFunctionPtr ); - break; -#endif -#endif - case EXTF80_ROUNDTOINT: - test_az_extF80_rx( - extF80M_roundToInt, subjFunction_az_extF80_rx, roundingMode, exact - ); - break; -#ifdef SUBJ_EXTF80_ADD - case EXTF80_ADD: - trueFunction_abz_extF80 = extF80M_add; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_SUB - case EXTF80_SUB: - trueFunction_abz_extF80 = extF80M_sub; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_MUL - case EXTF80_MUL: - trueFunction_abz_extF80 = extF80M_mul; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_DIV - case EXTF80_DIV: - trueFunction_abz_extF80 = extF80M_div; - goto test_abz_extF80; -#endif -#ifdef SUBJ_EXTF80_REM - case EXTF80_REM: - trueFunction_abz_extF80 = extF80M_rem; - goto test_abz_extF80; -#endif - test_abz_extF80: - test_abz_extF80( - trueFunction_abz_extF80, (funcType_abz_extF80 *) subjFunctionPtr ); - break; -#ifdef SUBJ_EXTF80_SQRT - case EXTF80_SQRT: - test_az_extF80( extF80M_sqrt, (funcType_az_extF80 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_EXTF80_EQ - case EXTF80_EQ: - trueFunction_ab_extF80_z_bool = extF80M_eq; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LE - case EXTF80_LE: - trueFunction_ab_extF80_z_bool = extF80M_le; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LT - case EXTF80_LT: - trueFunction_ab_extF80_z_bool = extF80M_lt; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_EQ_SIGNALING - case EXTF80_EQ_SIGNALING: - trueFunction_ab_extF80_z_bool = extF80M_eq_signaling; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LE_QUIET - case EXTF80_LE_QUIET: - trueFunction_ab_extF80_z_bool = extF80M_le_quiet; - goto test_ab_extF80_z_bool; -#endif -#ifdef SUBJ_EXTF80_LT_QUIET - case EXTF80_LT_QUIET: - trueFunction_ab_extF80_z_bool = extF80M_lt_quiet; - goto test_ab_extF80_z_bool; -#endif - test_ab_extF80_z_bool: - test_ab_extF80_z_bool( - trueFunction_ab_extF80_z_bool, - (funcType_ab_extF80_z_bool *) subjFunctionPtr - ); - break; -#endif - /*-------------------------------------------------------------------- - *--------------------------------------------------------------------*/ -#ifdef FLOAT128 - case F128_TO_UI32: - test_a_f128_z_ui32_rx( - f128M_to_ui32, subjFunction_a_f128_z_ui32_rx, roundingMode, exact - ); - break; - case F128_TO_UI64: - test_a_f128_z_ui64_rx( - f128M_to_ui64, subjFunction_a_f128_z_ui64_rx, roundingMode, exact - ); - break; - case F128_TO_I32: - test_a_f128_z_i32_rx( - f128M_to_i32, subjFunction_a_f128_z_i32_rx, roundingMode, exact ); - break; - case F128_TO_I64: - test_a_f128_z_i64_rx( - f128M_to_i64, subjFunction_a_f128_z_i64_rx, roundingMode, exact ); - break; -#ifdef FLOAT16 -#ifdef SUBJ_F128_TO_F16 - case F128_TO_F16: - test_a_f128_z_f16( - f128M_to_f16, (funcType_a_f128_z_f16 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef SUBJ_F128_TO_F32 - case F128_TO_F32: - test_a_f128_z_f32( - f128M_to_f32, (funcType_a_f128_z_f32 *) subjFunctionPtr ); - break; -#endif -#ifdef FLOAT64 -#ifdef SUBJ_F128_TO_F64 - case F128_TO_F64: - test_a_f128_z_f64( - f128M_to_f64, (funcType_a_f128_z_f64 *) subjFunctionPtr ); - break; -#endif -#endif -#ifdef EXTFLOAT80 -#ifdef SUBJ_F128_TO_EXTF80 - case F128_TO_EXTF80: - test_a_f128_z_extF80( - f128M_to_extF80M, (funcType_a_f128_z_extF80 *) subjFunctionPtr ); - break; -#endif -#endif - case F128_ROUNDTOINT: - test_az_f128_rx( - f128M_roundToInt, subjFunction_az_f128_rx, roundingMode, exact ); - break; -#ifdef SUBJ_F128_ADD - case F128_ADD: - trueFunction_abz_f128 = f128M_add; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_SUB - case F128_SUB: - trueFunction_abz_f128 = f128M_sub; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_MUL - case F128_MUL: - trueFunction_abz_f128 = f128M_mul; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_MULADD - case F128_MULADD: - test_abcz_f128( f128M_mulAdd, (funcType_abcz_f128 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F128_DIV - case F128_DIV: - trueFunction_abz_f128 = f128M_div; - goto test_abz_f128; -#endif -#ifdef SUBJ_F128_REM - case F128_REM: - trueFunction_abz_f128 = f128M_rem; - goto test_abz_f128; -#endif - test_abz_f128: - test_abz_f128( - trueFunction_abz_f128, (funcType_abz_f128 *) subjFunctionPtr ); - break; -#ifdef SUBJ_F128_SQRT - case F128_SQRT: - test_az_f128( f128M_sqrt, (funcType_az_f128 *) subjFunctionPtr ); - break; -#endif -#ifdef SUBJ_F128_EQ - case F128_EQ: - trueFunction_ab_f128_z_bool = f128M_eq; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LE - case F128_LE: - trueFunction_ab_f128_z_bool = f128M_le; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LT - case F128_LT: - trueFunction_ab_f128_z_bool = f128M_lt; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_EQ_SIGNALING - case F128_EQ_SIGNALING: - trueFunction_ab_f128_z_bool = f128M_eq_signaling; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LE_QUIET - case F128_LE_QUIET: - trueFunction_ab_f128_z_bool = f128M_le_quiet; - goto test_ab_f128_z_bool; -#endif -#ifdef SUBJ_F128_LT_QUIET - case F128_LT_QUIET: - trueFunction_ab_f128_z_bool = f128M_lt_quiet; - goto test_ab_f128_z_bool; -#endif - test_ab_f128_z_bool: - test_ab_f128_z_bool( - trueFunction_ab_f128_z_bool, - (funcType_ab_f128_z_bool *) subjFunctionPtr - ); - break; -#endif - } - if ( (verCases_errorStop && verCases_anyErrors) || verCases_stop ) { - verCases_exitWithStatus(); - } - -} - -static -void - testFunction( - const struct standardFunctionInfo *standardFunctionInfoPtr, - uint_fast8_t roundingPrecisionIn, - int roundingCodeIn - ) -{ - int functionCode, functionAttribs; - bool standardFunctionHasFixedRounding; - int roundingCode; - bool exact; - uint_fast8_t roundingPrecision, roundingMode; - - functionCode = standardFunctionInfoPtr->functionCode; - functionAttribs = functionInfos[functionCode].attribs; - standardFunctionHasFixedRounding = false; - if ( functionAttribs & FUNC_ARG_ROUNDINGMODE ) { - roundingCode = standardFunctionInfoPtr->roundingCode; - if ( roundingCode ) { - standardFunctionHasFixedRounding = true; - roundingCodeIn = roundingCode; - } - } - exact = standardFunctionInfoPtr->exact; - verCases_functionNamePtr = standardFunctionInfoPtr->namePtr; - roundingPrecision = 32; - for (;;) { - if ( functionAttribs & FUNC_EFF_ROUNDINGPRECISION ) { - if ( roundingPrecisionIn ) roundingPrecision = roundingPrecisionIn; - } else { - roundingPrecision = 0; - } -#ifdef EXTFLOAT80 - verCases_roundingPrecision = roundingPrecision; - if ( roundingPrecision ) { - extF80_roundingPrecision = roundingPrecision; - subjfloat_setExtF80RoundingPrecision( roundingPrecision ); - } -#endif - for ( - roundingCode = 1; roundingCode < NUM_ROUNDINGMODES; ++roundingCode - ) { -#ifndef SUBJFLOAT_ROUND_NEAR_MAXMAG - if ( roundingCode != ROUND_NEAR_MAXMAG ) { -#endif -#if defined FLOAT_ROUND_ODD && ! defined SUBJFLOAT_ROUND_NEAR_MAXMAG - if ( roundingCode != ROUND_ODD ) { -#endif - if ( - functionAttribs - & (FUNC_ARG_ROUNDINGMODE | FUNC_EFF_ROUNDINGMODE) - ) { - if ( roundingCodeIn ) roundingCode = roundingCodeIn; - } else { - roundingCode = 0; - } - verCases_roundingCode = - standardFunctionHasFixedRounding ? 0 : roundingCode; - if ( roundingCode ) { - roundingMode = roundingModes[roundingCode]; - softfloat_roundingMode = roundingMode; - if ( ! standardFunctionHasFixedRounding ) { - subjfloat_setRoundingMode( roundingMode ); - } - } - testFunctionInstance( functionCode, roundingMode, exact ); - if ( roundingCodeIn || ! roundingCode ) break; -#if defined FLOAT_ROUND_ODD && ! defined SUBJFLOAT_ROUND_NEAR_MAXMAG - } -#endif -#ifndef SUBJFLOAT_ROUND_NEAR_MAXMAG - } -#endif - } - if ( roundingPrecisionIn || ! roundingPrecision ) break; - if ( roundingPrecision == 80 ) { - break; - } else if ( roundingPrecision == 64 ) { - roundingPrecision = 80; - } else if ( roundingPrecision == 32 ) { - roundingPrecision = 64; - } - } - -} - -int main( int argc, char *argv[] ) -{ - bool haveFunctionArg; - const struct standardFunctionInfo *standardFunctionInfoPtr; - int numOperands; - uint_fast8_t roundingPrecision; - int roundingCode; - const char *argPtr; - void (*const *subjFunctionPtrPtr)(); - const char *functionNamePtr; - unsigned long ui; - long i; - int functionMatchAttrib; - - /*------------------------------------------------------------------------ - *------------------------------------------------------------------------*/ - fail_programName = "testfloat"; - if ( argc <= 1 ) goto writeHelpMessage; - genCases_setLevel( 1 ); - verCases_maxErrorCount = 20; - testLoops_trueFlagsPtr = &softfloat_exceptionFlags; - testLoops_subjFlagsFunction = subjfloat_clearExceptionFlags; - haveFunctionArg = false; - standardFunctionInfoPtr = 0; - numOperands = 0; - roundingPrecision = 0; - roundingCode = 0; - for (;;) { - --argc; - if ( ! argc ) break; - argPtr = *++argv; - if ( ! argPtr ) break; - if ( argPtr[0] == '-' ) ++argPtr; - if ( - ! strcmp( argPtr, "help" ) || ! strcmp( argPtr, "-help" ) - || ! strcmp( argPtr, "h" ) - ) { - writeHelpMessage: - fputs( -"testfloat [