From 6d0c915e678d9917f1831f70ae54fc03e57ba793 Mon Sep 17 00:00:00 2001 From: Tim Hutt Date: Tue, 17 Dec 2024 09:35:18 +0000 Subject: [PATCH] Implement CMake build system This is a draft of a CMake build system. It doesn't yet include RVFI, JSON docs, formal stuff, etc. --- .gitignore | 5 +- .pre-commit-config.yaml | 2 +- CMakeLists.txt | 76 + c_emulator/SoftFloat-3e/.clang-format | 3 - .../build/Linux-x86_64-GCC/platform.h | 54 - .../build/Win32-SSE2-MinGW/platform.h | 53 - .../build/Win64-MinGW-w64/platform.h | 54 - .../source/8086/s_propagateNaNF128UI.c | 105 - cmake/extra_fast.cmake | 28 + cmake/modules/FindGMP.cmake | 51 + dependencies/softfloat/CMakeLists.txt | 44 + .../softfloat/berkeley-softfloat-3/.gitignore | 2 + .../berkeley-softfloat-3}/COPYING.txt | 74 +- .../berkeley-softfloat-3}/README.html | 98 +- .../softfloat/berkeley-softfloat-3/README.md | 24 + .../berkeley-softfloat-3}/README.txt | 42 +- .../build/Linux-386-GCC/Makefile | 650 ++-- .../build/Linux-386-GCC}/platform.h | 106 +- .../build/Linux-386-SSE2-GCC}/Makefile | 650 ++-- .../build/Linux-386-SSE2-GCC}/platform.h | 106 +- .../build/Linux-ARM-VFPv2-GCC/Makefile | 646 ++-- .../build/Linux-ARM-VFPv2-GCC}/platform.h | 106 +- .../build/Linux-RISCV-GCC/Makefile | 3 +- .../build/Linux-RISCV-GCC/platform.h | 0 .../build/Linux-x86_64-GCC/Makefile | 780 ++--- .../build/Linux-x86_64-GCC}/platform.h | 107 +- .../build/Win32-MinGW/Makefile | 650 ++-- .../build/Win32-MinGW/platform.h | 53 + .../build/Win32-SSE2-MinGW}/Makefile | 650 ++-- .../build/Win32-SSE2-MinGW/platform.h | 53 + .../build/Win64-MinGW-w64/Makefile | 780 ++--- .../build/Win64-MinGW-w64/platform.h | 54 + .../build/template-FAST_INT64/Makefile | 782 ++--- .../build/template-FAST_INT64/platform.h | 100 +- .../build/template-not-FAST_INT64/Makefile | 650 ++-- .../build/template-not-FAST_INT64/platform.h | 100 +- .../doc/SoftFloat-history.html | 516 +-- .../doc/SoftFloat-source.html | 1372 ++++---- .../berkeley-softfloat-3}/doc/SoftFloat.html | 3054 ++++++++--------- .../source/8086-SSE}/extF80M_isSignalingNaN.c | 114 +- .../source/8086-SSE}/f128M_isSignalingNaN.c | 120 +- .../source/8086-SSE/s_commonNaNToExtF80M.c | 112 +- .../source/8086-SSE/s_commonNaNToExtF80UI.c | 112 +- .../source/8086-SSE/s_commonNaNToF128M.c | 112 +- .../source/8086-SSE}/s_commonNaNToF128UI.c | 110 +- .../source/8086-SSE/s_commonNaNToF16UI.c | 102 +- .../source/8086-SSE}/s_commonNaNToF32UI.c | 102 +- .../source/8086-SSE/s_commonNaNToF64UI.c | 106 +- .../source/8086-SSE/s_extF80MToCommonNaN.c | 124 +- .../source/8086-SSE}/s_extF80UIToCommonNaN.c | 124 +- .../source/8086-SSE}/s_f128MToCommonNaN.c | 124 +- .../source/8086-SSE/s_f128UIToCommonNaN.c | 130 +- .../source/8086-SSE}/s_f16UIToCommonNaN.c | 118 +- .../source/8086-SSE}/s_f32UIToCommonNaN.c | 118 +- .../source/8086-SSE}/s_f64UIToCommonNaN.c | 118 +- .../source/8086-SSE/s_propagateNaNExtF80M.c | 214 +- .../source/8086-SSE}/s_propagateNaNExtF80UI.c | 212 +- .../source/8086-SSE/s_propagateNaNF128M.c | 152 +- .../source/8086-SSE/s_propagateNaNF128UI.c | 162 +- .../source/8086-SSE/s_propagateNaNF16UI.c | 126 +- .../source/8086-SSE/s_propagateNaNF32UI.c | 126 +- .../source/8086-SSE/s_propagateNaNF64UI.c | 126 +- .../source/8086-SSE}/softfloat_raiseFlags.c | 0 .../source/8086-SSE/specialize.h | 752 ++-- .../source/8086}/extF80M_isSignalingNaN.c | 114 +- .../source/8086/f128M_isSignalingNaN.c | 120 +- .../source/8086/s_commonNaNToExtF80M.c | 112 +- .../source/8086/s_commonNaNToExtF80UI.c | 112 +- .../source/8086/s_commonNaNToF128M.c | 112 +- .../source/8086}/s_commonNaNToF128UI.c | 110 +- .../source/8086/s_commonNaNToF16UI.c | 102 +- .../source/8086}/s_commonNaNToF32UI.c | 102 +- .../source/8086/s_commonNaNToF64UI.c | 106 +- .../source/8086/s_extF80MToCommonNaN.c | 124 +- .../source/8086}/s_extF80UIToCommonNaN.c | 124 +- .../source/8086}/s_f128MToCommonNaN.c | 124 +- .../source/8086/s_f128UIToCommonNaN.c | 130 +- .../source/8086}/s_f16UIToCommonNaN.c | 118 +- .../source/8086}/s_f32UIToCommonNaN.c | 118 +- .../source/8086}/s_f64UIToCommonNaN.c | 118 +- .../source/8086/s_propagateNaNExtF80M.c | 214 +- .../source/8086}/s_propagateNaNExtF80UI.c | 212 +- .../source/8086/s_propagateNaNF128M.c | 216 +- .../source/8086}/s_propagateNaNF128UI.c | 0 .../source/8086/s_propagateNaNF16UI.c | 168 +- .../source/8086/s_propagateNaNF32UI.c | 168 +- .../source/8086/s_propagateNaNF64UI.c | 168 +- .../source/8086}/softfloat_raiseFlags.c | 104 +- .../source/8086/specialize.h | 752 ++-- .../extF80M_isSignalingNaN.c | 114 +- .../f128M_isSignalingNaN.c | 120 +- .../s_commonNaNToExtF80M.c | 114 +- .../s_commonNaNToExtF80UI.c | 114 +- .../ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c | 120 +- .../s_commonNaNToF128UI.c | 112 +- .../ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c | 0 .../ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c | 0 .../ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c | 0 .../s_extF80MToCommonNaN.c | 0 .../s_extF80UIToCommonNaN.c | 10 +- .../ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c | 10 +- .../s_f128UIToCommonNaN.c | 10 +- .../ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c | 10 +- .../ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c | 10 +- .../ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c | 10 +- .../s_propagateNaNExtF80M.c | 148 +- .../s_propagateNaNExtF80UI.c | 146 +- .../s_propagateNaNF128M.c | 136 +- .../s_propagateNaNF128UI.c | 146 +- .../s_propagateNaNF16UI.c | 116 +- .../s_propagateNaNF32UI.c | 116 +- .../s_propagateNaNF64UI.c | 116 +- .../softfloat_raiseFlags.c | 104 +- .../source/ARM-VFPv2-defaultNaN/specialize.h | 814 ++--- .../source/ARM-VFPv2/extF80M_isSignalingNaN.c | 114 +- .../source/ARM-VFPv2}/f128M_isSignalingNaN.c | 120 +- .../source/ARM-VFPv2/s_commonNaNToExtF80M.c | 112 +- .../source/ARM-VFPv2/s_commonNaNToExtF80UI.c | 112 +- .../source/ARM-VFPv2/s_commonNaNToF128M.c | 112 +- .../source/ARM-VFPv2/s_commonNaNToF128UI.c | 110 +- .../source/ARM-VFPv2/s_commonNaNToF16UI.c | 102 +- .../source/ARM-VFPv2/s_commonNaNToF32UI.c | 102 +- .../source/ARM-VFPv2/s_commonNaNToF64UI.c | 106 +- .../source/ARM-VFPv2/s_extF80MToCommonNaN.c | 124 +- .../source/ARM-VFPv2/s_extF80UIToCommonNaN.c | 124 +- .../source/ARM-VFPv2/s_f128MToCommonNaN.c | 124 +- .../source/ARM-VFPv2/s_f128UIToCommonNaN.c | 130 +- .../source/ARM-VFPv2/s_f16UIToCommonNaN.c | 118 +- .../source/ARM-VFPv2/s_f32UIToCommonNaN.c | 118 +- .../source/ARM-VFPv2/s_f64UIToCommonNaN.c | 118 +- .../source/ARM-VFPv2/s_propagateNaNExtF80M.c | 172 +- .../source/ARM-VFPv2/s_propagateNaNExtF80UI.c | 166 +- .../source/ARM-VFPv2/s_propagateNaNF128M.c | 154 +- .../source/ARM-VFPv2/s_propagateNaNF128UI.c | 166 +- .../source/ARM-VFPv2/s_propagateNaNF16UI.c | 126 +- .../source/ARM-VFPv2/s_propagateNaNF32UI.c | 126 +- .../source/ARM-VFPv2/s_propagateNaNF64UI.c | 126 +- .../source/ARM-VFPv2/softfloat_raiseFlags.c | 104 +- .../source/ARM-VFPv2/specialize.h | 752 ++-- .../source/RISCV/extF80M_isSignalingNaN.c | 57 + .../source/RISCV/f128M_isSignalingNaN.c | 60 + .../source/RISCV/s_commonNaNToExtF80M.c | 57 + .../source/RISCV/s_commonNaNToExtF80UI.c | 57 + .../source/RISCV/s_commonNaNToF128M.c | 60 + .../source/RISCV/s_commonNaNToF128UI.c | 56 + .../source/RISCV}/s_commonNaNToF16UI.c | 10 +- .../source/RISCV}/s_commonNaNToF32UI.c | 10 +- .../source/RISCV}/s_commonNaNToF64UI.c | 10 +- .../source/RISCV}/s_extF80MToCommonNaN.c | 10 +- .../source/RISCV/s_extF80UIToCommonNaN.c | 5 + .../source/RISCV/s_f128MToCommonNaN.c | 5 + .../source/RISCV/s_f128UIToCommonNaN.c | 5 + .../source/RISCV/s_f16UIToCommonNaN.c | 5 + .../source/RISCV/s_f32UIToCommonNaN.c | 5 + .../source/RISCV/s_f64UIToCommonNaN.c | 5 + .../source/RISCV/s_propagateNaNExtF80M.c | 74 + .../source/RISCV/s_propagateNaNExtF80UI.c | 73 + .../source/RISCV/s_propagateNaNF128M.c | 68 + .../source/RISCV/s_propagateNaNF128UI.c | 73 + .../source/RISCV/s_propagateNaNF16UI.c | 2 +- .../source/RISCV/s_propagateNaNF32UI.c | 2 +- .../source/RISCV/s_propagateNaNF64UI.c | 2 +- .../source/RISCV}/softfloat_raiseFlags.c | 104 +- .../source/RISCV/specialize.h | 6 +- .../source/extF80M_add.c | 200 +- .../source/extF80M_div.c | 388 +-- .../berkeley-softfloat-3}/source/extF80M_eq.c | 196 +- .../source/extF80M_eq_signaling.c | 184 +- .../berkeley-softfloat-3}/source/extF80M_le.c | 212 +- .../source/extF80M_le_quiet.c | 224 +- .../berkeley-softfloat-3}/source/extF80M_lt.c | 212 +- .../source/extF80M_lt_quiet.c | 224 +- .../source/extF80M_mul.c | 278 +- .../source/extF80M_rem.c | 408 +-- .../source/extF80M_roundToInt.c | 352 +- .../source/extF80M_sqrt.c | 360 +- .../source/extF80M_sub.c | 200 +- .../source/extF80M_to_f128M.c | 250 +- .../source/extF80M_to_f16.c | 224 +- .../source/extF80M_to_f32.c | 224 +- .../source/extF80M_to_f64.c | 224 +- .../source/extF80M_to_i32.c | 200 +- .../source/extF80M_to_i32_r_minMag.c | 240 +- .../source/extF80M_to_i64.c | 194 +- .../source/extF80M_to_i64_r_minMag.c | 230 +- .../source/extF80M_to_ui32.c | 202 +- .../source/extF80M_to_ui32_r_minMag.c | 222 +- .../source/extF80M_to_ui64.c | 194 +- .../source/extF80M_to_ui64_r_minMag.c | 216 +- .../berkeley-softfloat-3}/source/extF80_add.c | 160 +- .../berkeley-softfloat-3}/source/extF80_div.c | 406 +-- .../berkeley-softfloat-3}/source/extF80_eq.c | 146 +- .../source/extF80_eq_signaling.c | 134 +- .../source/extF80_isSignalingNaN.c | 102 +- .../berkeley-softfloat-3}/source/extF80_le.c | 146 +- .../source/extF80_le_quiet.c | 156 +- .../berkeley-softfloat-3}/source/extF80_lt.c | 146 +- .../source/extF80_lt_quiet.c | 156 +- .../berkeley-softfloat-3}/source/extF80_mul.c | 316 +- .../berkeley-softfloat-3}/source/extF80_rem.c | 450 +-- .../source/extF80_roundToInt.c | 308 +- .../source/extF80_sqrt.c | 352 +- .../berkeley-softfloat-3}/source/extF80_sub.c | 160 +- .../source/extF80_to_f128.c | 150 +- .../source/extF80_to_f16.c | 192 +- .../source/extF80_to_f32.c | 192 +- .../source/extF80_to_f64.c | 192 +- .../source/extF80_to_i32.c | 166 +- .../source/extF80_to_i32_r_minMag.c | 194 +- .../source/extF80_to_i64.c | 178 +- .../source/extF80_to_i64_r_minMag.c | 188 +- .../source/extF80_to_ui32.c | 166 +- .../source/extF80_to_ui32_r_minMag.c | 176 +- .../source/extF80_to_ui64.c | 168 +- .../source/extF80_to_ui64_r_minMag.c | 176 +- .../berkeley-softfloat-3}/source/f128M_add.c | 194 +- .../berkeley-softfloat-3}/source/f128M_div.c | 374 +- .../berkeley-softfloat-3}/source/f128M_eq.c | 200 +- .../source/f128M_eq_signaling.c | 184 +- .../berkeley-softfloat-3}/source/f128M_le.c | 186 +- .../source/f128M_le_quiet.c | 192 +- .../berkeley-softfloat-3}/source/f128M_lt.c | 186 +- .../source/f128M_lt_quiet.c | 192 +- .../berkeley-softfloat-3}/source/f128M_mul.c | 316 +- .../source/f128M_mulAdd.c | 184 +- .../berkeley-softfloat-3}/source/f128M_rem.c | 364 +- .../source/f128M_roundToInt.c | 446 +-- .../berkeley-softfloat-3}/source/f128M_sqrt.c | 456 +-- .../berkeley-softfloat-3}/source/f128M_sub.c | 194 +- .../source/f128M_to_extF80M.c | 202 +- .../source/f128M_to_f16.c | 226 +- .../source/f128M_to_f32.c | 218 +- .../source/f128M_to_f64.c | 224 +- .../source/f128M_to_i32.c | 196 +- .../source/f128M_to_i32_r_minMag.c | 212 +- .../source/f128M_to_i64.c | 204 +- .../source/f128M_to_i64_r_minMag.c | 248 +- .../source/f128M_to_ui32.c | 196 +- .../source/f128M_to_ui32_r_minMag.c | 204 +- .../source/f128M_to_ui64.c | 204 +- .../source/f128M_to_ui64_r_minMag.c | 228 +- .../berkeley-softfloat-3}/source/f128_add.c | 156 +- .../berkeley-softfloat-3}/source/f128_div.c | 398 +-- .../berkeley-softfloat-3}/source/f128_eq.c | 146 +- .../source/f128_eq_signaling.c | 134 +- .../source/f128_isSignalingNaN.c | 102 +- .../berkeley-softfloat-3}/source/f128_le.c | 144 +- .../source/f128_le_quiet.c | 156 +- .../berkeley-softfloat-3}/source/f128_lt.c | 144 +- .../source/f128_lt_quiet.c | 156 +- .../berkeley-softfloat-3}/source/f128_mul.c | 326 +- .../source/f128_mulAdd.c | 126 +- .../berkeley-softfloat-3}/source/f128_rem.c | 380 +- .../source/f128_roundToInt.c | 344 +- .../berkeley-softfloat-3}/source/f128_sqrt.c | 402 +-- .../berkeley-softfloat-3}/source/f128_sub.c | 156 +- .../source/f128_to_extF80.c | 218 +- .../source/f128_to_f16.c | 190 +- .../source/f128_to_f32.c | 190 +- .../source/f128_to_f64.c | 200 +- .../source/f128_to_i32.c | 170 +- .../source/f128_to_i32_r_minMag.c | 200 +- .../source/f128_to_i64.c | 190 +- .../source/f128_to_i64_r_minMag.c | 226 +- .../source/f128_to_ui32.c | 172 +- .../source/f128_to_ui32_r_minMag.c | 178 +- .../source/f128_to_ui64.c | 192 +- .../source/f128_to_ui64_r_minMag.c | 210 +- .../berkeley-softfloat-3}/source/f16_add.c | 140 +- .../berkeley-softfloat-3}/source/f16_div.c | 372 +- .../berkeley-softfloat-3}/source/f16_eq.c | 132 +- .../source/f16_eq_signaling.c | 122 +- .../source/f16_isSignalingNaN.c | 102 +- .../berkeley-softfloat-3}/source/f16_le.c | 132 +- .../source/f16_le_quiet.c | 142 +- .../berkeley-softfloat-3}/source/f16_lt.c | 132 +- .../source/f16_lt_quiet.c | 142 +- .../berkeley-softfloat-3}/source/f16_mul.c | 280 +- .../berkeley-softfloat-3}/source/f16_mulAdd.c | 120 +- .../berkeley-softfloat-3}/source/f16_rem.c | 342 +- .../source/f16_roundToInt.c | 240 +- .../berkeley-softfloat-3}/source/f16_sqrt.c | 272 +- .../berkeley-softfloat-3}/source/f16_sub.c | 140 +- .../source/f16_to_extF80.c | 202 +- .../source/f16_to_extF80M.c | 222 +- .../source/f16_to_f128.c | 192 +- .../source/f16_to_f128M.c | 222 +- .../berkeley-softfloat-3}/source/f16_to_f32.c | 186 +- .../berkeley-softfloat-3}/source/f16_to_f64.c | 186 +- .../berkeley-softfloat-3}/source/f16_to_i32.c | 174 +- .../source/f16_to_i32_r_minMag.c | 176 +- .../berkeley-softfloat-3}/source/f16_to_i64.c | 174 +- .../source/f16_to_i64_r_minMag.c | 176 +- .../source/f16_to_ui32.c | 168 +- .../source/f16_to_ui32_r_minMag.c | 174 +- .../source/f16_to_ui64.c | 192 +- .../source/f16_to_ui64_r_minMag.c | 174 +- .../berkeley-softfloat-3}/source/f32_add.c | 140 +- .../berkeley-softfloat-3}/source/f32_div.c | 360 +- .../berkeley-softfloat-3}/source/f32_eq.c | 132 +- .../source/f32_eq_signaling.c | 122 +- .../source/f32_isSignalingNaN.c | 102 +- .../berkeley-softfloat-3}/source/f32_le.c | 132 +- .../source/f32_le_quiet.c | 142 +- .../berkeley-softfloat-3}/source/f32_lt.c | 132 +- .../source/f32_lt_quiet.c | 142 +- .../berkeley-softfloat-3}/source/f32_mul.c | 274 +- .../berkeley-softfloat-3}/source/f32_mulAdd.c | 120 +- .../berkeley-softfloat-3}/source/f32_rem.c | 336 +- .../source/f32_roundToInt.c | 240 +- .../berkeley-softfloat-3}/source/f32_sqrt.c | 242 +- .../berkeley-softfloat-3}/source/f32_sub.c | 140 +- .../source/f32_to_extF80.c | 202 +- .../source/f32_to_extF80M.c | 222 +- .../source/f32_to_f128.c | 192 +- .../source/f32_to_f128M.c | 230 +- .../berkeley-softfloat-3}/source/f32_to_f16.c | 176 +- .../berkeley-softfloat-3}/source/f32_to_f64.c | 186 +- .../berkeley-softfloat-3}/source/f32_to_i32.c | 168 +- .../source/f32_to_i32_r_minMag.c | 178 +- .../berkeley-softfloat-3}/source/f32_to_i64.c | 192 +- .../source/f32_to_i64_r_minMag.c | 188 +- .../source/f32_to_ui32.c | 168 +- .../source/f32_to_ui32_r_minMag.c | 176 +- .../source/f32_to_ui64.c | 192 +- .../source/f32_to_ui64_r_minMag.c | 180 +- .../berkeley-softfloat-3}/source/f64_add.c | 148 +- .../berkeley-softfloat-3}/source/f64_div.c | 344 +- .../berkeley-softfloat-3}/source/f64_eq.c | 132 +- .../source/f64_eq_signaling.c | 122 +- .../source/f64_isSignalingNaN.c | 102 +- .../berkeley-softfloat-3}/source/f64_le.c | 134 +- .../source/f64_le_quiet.c | 144 +- .../berkeley-softfloat-3}/source/f64_lt.c | 134 +- .../source/f64_lt_quiet.c | 144 +- .../berkeley-softfloat-3}/source/f64_mul.c | 300 +- .../berkeley-softfloat-3}/source/f64_mulAdd.c | 120 +- .../berkeley-softfloat-3}/source/f64_rem.c | 378 +- .../source/f64_roundToInt.c | 240 +- .../berkeley-softfloat-3}/source/f64_sqrt.c | 266 +- .../berkeley-softfloat-3}/source/f64_sub.c | 148 +- .../source/f64_to_extF80.c | 202 +- .../source/f64_to_extF80M.c | 222 +- .../source/f64_to_f128.c | 196 +- .../source/f64_to_f128M.c | 234 +- .../berkeley-softfloat-3}/source/f64_to_f16.c | 176 +- .../berkeley-softfloat-3}/source/f64_to_f32.c | 176 +- .../berkeley-softfloat-3}/source/f64_to_i32.c | 164 +- .../source/f64_to_i32_r_minMag.c | 192 +- .../berkeley-softfloat-3}/source/f64_to_i64.c | 206 +- .../source/f64_to_i64_r_minMag.c | 200 +- .../source/f64_to_ui32.c | 164 +- .../source/f64_to_ui32_r_minMag.c | 176 +- .../source/f64_to_ui64.c | 206 +- .../source/f64_to_ui64_r_minMag.c | 186 +- .../source/i32_to_extF80.c | 130 +- .../source/i32_to_extF80M.c | 156 +- .../source/i32_to_f128.c | 128 +- .../source/i32_to_f128M.c | 162 +- .../berkeley-softfloat-3}/source/i32_to_f16.c | 142 +- .../berkeley-softfloat-3}/source/i32_to_f32.c | 116 +- .../berkeley-softfloat-3}/source/i32_to_f64.c | 130 +- .../source/i64_to_extF80.c | 130 +- .../source/i64_to_extF80M.c | 156 +- .../source/i64_to_f128.c | 144 +- .../source/i64_to_f128M.c | 184 +- .../berkeley-softfloat-3}/source/i64_to_f16.c | 140 +- .../berkeley-softfloat-3}/source/i64_to_f32.c | 140 +- .../berkeley-softfloat-3}/source/i64_to_f64.c | 116 +- .../source/include/internals.h | 556 +-- .../source/include/opts-GCC.h | 228 +- .../source/include/primitiveTypes.h | 170 +- .../source/include/primitives.h | 2320 ++++++------- .../source/include/softfloat.h | 744 ++-- .../source/include/softfloat_types.h | 162 +- .../berkeley-softfloat-3}/source/s_add128.c | 110 +- .../berkeley-softfloat-3}/source/s_add256M.c | 130 +- .../source/s_addCarryM.c | 140 +- .../source/s_addComplCarryM.c | 140 +- .../source/s_addExtF80M.c | 372 +- .../berkeley-softfloat-3}/source/s_addF128M.c | 422 +-- .../berkeley-softfloat-3}/source/s_addM.c | 140 +- .../source/s_addMagsExtF80.c | 312 +- .../source/s_addMagsF128.c | 308 +- .../source/s_addMagsF16.c | 366 +- .../source/s_addMagsF32.c | 252 +- .../source/s_addMagsF64.c | 256 +- .../source/s_approxRecip32_1.c | 132 +- .../source/s_approxRecipSqrt32_1.c | 146 +- .../source/s_approxRecipSqrt_1Ks.c | 98 +- .../source/s_approxRecip_1Ks.c | 98 +- .../source/s_compare128M.c | 124 +- .../source/s_compare96M.c | 124 +- .../source/s_compareNonnormExtF80M.c | 222 +- .../source/s_countLeadingZeros16.c | 120 +- .../source/s_countLeadingZeros32.c | 128 +- .../source/s_countLeadingZeros64.c | 146 +- .../source/s_countLeadingZeros8.c | 118 +- .../berkeley-softfloat-3}/source/s_eq128.c | 102 +- .../source/s_invalidExtF80M.c | 98 +- .../source/s_invalidF128M.c | 106 +- .../source/s_isNaNF128M.c | 114 +- .../berkeley-softfloat-3}/source/s_le128.c | 102 +- .../berkeley-softfloat-3}/source/s_lt128.c | 102 +- .../source/s_mul128By32.c | 116 +- .../source/s_mul128MTo256M.c | 200 +- .../source/s_mul128To256M.c | 142 +- .../source/s_mul64ByShifted32To128.c | 112 +- .../source/s_mul64To128.c | 132 +- .../source/s_mul64To128M.c | 136 +- .../source/s_mulAddF128.c | 700 ++-- .../source/s_mulAddF128M.c | 764 ++--- .../source/s_mulAddF16.c | 452 +-- .../source/s_mulAddF32.c | 448 +-- .../source/s_mulAddF64.c | 992 +++--- .../berkeley-softfloat-3}/source/s_negXM.c | 126 +- .../source/s_normExtF80SigM.c | 104 +- .../source/s_normRoundPackMToExtF80M.c | 156 +- .../source/s_normRoundPackMToF128M.c | 146 +- .../source/s_normRoundPackToExtF80.c | 142 +- .../source/s_normRoundPackToF128.c | 162 +- .../source/s_normRoundPackToF16.c | 116 +- .../source/s_normRoundPackToF32.c | 116 +- .../source/s_normRoundPackToF64.c | 116 +- .../source/s_normSubnormalExtF80Sig.c | 104 +- .../source/s_normSubnormalF128Sig.c | 130 +- .../source/s_normSubnormalF128SigM.c | 122 +- .../source/s_normSubnormalF16Sig.c | 104 +- .../source/s_normSubnormalF32Sig.c | 104 +- .../source/s_normSubnormalF64Sig.c | 104 +- .../source/s_remStepMBy32.c | 172 +- .../source/s_roundMToI64.c | 204 +- .../source/s_roundMToUI64.c | 196 +- .../source/s_roundPackMToExtF80M.c | 512 +-- .../source/s_roundPackMToF128M.c | 356 +- .../source/s_roundPackToExtF80.c | 512 +-- .../source/s_roundPackToF128.c | 342 +- .../source/s_roundPackToF16.c | 226 +- .../source/s_roundPackToF32.c | 226 +- .../source/s_roundPackToF64.c | 234 +- .../source/s_roundToI32.c | 196 +- .../source/s_roundToI64.c | 202 +- .../source/s_roundToUI32.c | 186 +- .../source/s_roundToUI64.c | 194 +- .../source/s_shiftLeftM.c | 182 +- .../source/s_shiftNormSigF128M.c | 156 +- .../source/s_shiftRightJam128.c | 138 +- .../source/s_shiftRightJam128Extra.c | 154 +- .../source/s_shiftRightJam256M.c | 252 +- .../source/s_shiftRightJam32.c | 102 +- .../source/s_shiftRightJam64.c | 102 +- .../source/s_shiftRightJam64Extra.c | 124 +- .../source/s_shiftRightJamM.c | 202 +- .../source/s_shiftRightM.c | 182 +- .../source/s_shortShiftLeft128.c | 110 +- .../source/s_shortShiftLeft64To96M.c | 112 +- .../source/s_shortShiftLeftM.c | 140 +- .../source/s_shortShiftRight128.c | 110 +- .../source/s_shortShiftRightExtendM.c | 146 +- .../source/s_shortShiftRightJam128.c | 120 +- .../source/s_shortShiftRightJam128Extra.c | 118 +- .../source/s_shortShiftRightJam64.c | 100 +- .../source/s_shortShiftRightJam64Extra.c | 112 +- .../source/s_shortShiftRightJamM.c | 144 +- .../source/s_shortShiftRightM.c | 140 +- .../berkeley-softfloat-3}/source/s_sub128.c | 110 +- .../berkeley-softfloat-3}/source/s_sub1XM.c | 120 +- .../berkeley-softfloat-3}/source/s_sub256M.c | 130 +- .../berkeley-softfloat-3}/source/s_subM.c | 140 +- .../source/s_subMagsExtF80.c | 316 +- .../source/s_subMagsF128.c | 278 +- .../source/s_subMagsF16.c | 374 +- .../source/s_subMagsF32.c | 286 +- .../source/s_subMagsF64.c | 282 +- .../source/s_tryPropagateNaNExtF80M.c | 128 +- .../source/s_tryPropagateNaNF128M.c | 110 +- .../source/softfloat_state.c | 104 +- .../source/ui32_to_extF80.c | 118 +- .../source/ui32_to_extF80M.c | 148 +- .../source/ui32_to_f128.c | 120 +- .../source/ui32_to_f128M.c | 152 +- .../source/ui32_to_f16.c | 130 +- .../source/ui32_to_f32.c | 114 +- .../source/ui32_to_f64.c | 118 +- .../source/ui64_to_extF80.c | 118 +- .../source/ui64_to_extF80M.c | 148 +- .../source/ui64_to_f128.c | 136 +- .../source/ui64_to_f128M.c | 172 +- .../source/ui64_to_f16.c | 128 +- .../source/ui64_to_f32.c | 128 +- .../source/ui64_to_f64.c | 118 +- emulator/CMakeLists.txt | 41 + {c_emulator => emulator}/config.json | 0 {c_emulator => emulator}/reset_vec.S | 0 {c_emulator => emulator}/reset_vec.bin | Bin {c_emulator => emulator}/riscv_config.h | 0 {c_emulator => emulator}/riscv_platform.c | 0 {c_emulator => emulator}/riscv_platform.h | 0 .../riscv_platform_impl.c | 0 .../riscv_platform_impl.h | 0 {c_emulator => emulator}/riscv_prelude.c | 0 {c_emulator => emulator}/riscv_prelude.h | 0 {c_emulator => emulator}/riscv_sail.h | 0 {c_emulator => emulator}/riscv_sim.c | 0 emulator/riscv_sim_RV64 | Bin 0 -> 19956896 bytes {c_emulator => emulator}/riscv_softfloat.c | 0 {c_emulator => emulator}/riscv_softfloat.h | 0 model/CMakeLists.txt | 266 ++ sail_runtime/CMakeLists.txt | 23 + test/get_perf.py | 42 - test/riscv-tests/.gitignore | 2 - test/riscv-tests/CMakeLists.txt | 46 + test/run_fp_tests.sh | 97 - test/run_tests.sh | 125 - 514 files changed, 48328 insertions(+), 47434 deletions(-) create mode 100644 CMakeLists.txt delete mode 100644 c_emulator/SoftFloat-3e/.clang-format delete mode 100644 c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h delete mode 100644 c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h delete mode 100644 c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/platform.h delete mode 100644 c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c create mode 100644 cmake/extra_fast.cmake create mode 100644 cmake/modules/FindGMP.cmake create mode 100644 dependencies/softfloat/CMakeLists.txt create mode 100644 dependencies/softfloat/berkeley-softfloat-3/.gitignore rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/COPYING.txt (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/README.html (96%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/README.md rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/README.txt (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Linux-386-GCC/Makefile (96%) rename {c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC => dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC}/platform.h (97%) rename {c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW => dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC}/Makefile (96%) rename {c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC => dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC}/platform.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Linux-ARM-VFPv2-GCC/Makefile (96%) rename {c_emulator/SoftFloat-3e/build/Linux-386-GCC => dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC}/platform.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Linux-RISCV-GCC/Makefile (99%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Linux-RISCV-GCC/platform.h (100%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Linux-x86_64-GCC/Makefile (96%) rename {c_emulator/SoftFloat-3e/build/Win32-MinGW => dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC}/platform.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Win32-MinGW/Makefile (96%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/platform.h rename {c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC => dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW}/Makefile (96%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/platform.h rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/Win64-MinGW-w64/Makefile (96%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/platform.h rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/template-FAST_INT64/Makefile (96%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/template-FAST_INT64/platform.h (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/template-not-FAST_INT64/Makefile (96%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/build/template-not-FAST_INT64/platform.h (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/doc/SoftFloat-history.html (95%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/doc/SoftFloat-source.html (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/doc/SoftFloat.html (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/extF80M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/f128M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_commonNaNToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_commonNaNToExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_commonNaNToF128M.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_commonNaNToF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_commonNaNToF16UI.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_commonNaNToF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_commonNaNToF64UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_extF80MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_extF80UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_f128MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_f128UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_f16UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_f32UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_f64UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNExtF80M.c (97%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/s_propagateNaNExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNF16UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/s_propagateNaNF64UI.c (97%) rename {c_emulator/SoftFloat-3e/source/RISCV => dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE}/softfloat_raiseFlags.c (100%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086-SSE/specialize.h (98%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/8086}/extF80M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/f128M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_commonNaNToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_commonNaNToExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_commonNaNToF128M.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_commonNaNToF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_commonNaNToF16UI.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_commonNaNToF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_commonNaNToF64UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_extF80MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_extF80UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_f128MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_f128UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_f16UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_f32UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_f64UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_propagateNaNExtF80M.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_propagateNaNExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_propagateNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e/source/RISCV => dependencies/softfloat/berkeley-softfloat-3/source/8086}/s_propagateNaNF128UI.c (100%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_propagateNaNF16UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_propagateNaNF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/s_propagateNaNF64UI.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/8086}/softfloat_raiseFlags.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/8086/specialize.h (98%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN}/extF80M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2 => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN}/f128M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c (97%) rename c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF32UI.c => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c (100%) rename c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF64UI.c => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c (100%) rename c_emulator/SoftFloat-3e/source/RISCV/s_f32UIToCommonNaN.c => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c (100%) rename c_emulator/SoftFloat-3e/source/RISCV/s_f64UIToCommonNaN.c => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c (100%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2-defaultNaN/specialize.h (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/extF80M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e/source/8086-SSE => dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2}/f128M_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToF16UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_commonNaNToF64UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_extF80MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_extF80UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_f128MToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_f128UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_f16UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_f32UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_f64UIToCommonNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNExtF80UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNF128UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNF16UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNF32UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/s_propagateNaNF64UI.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/softfloat_raiseFlags.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ARM-VFPv2/specialize.h (98%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/extF80M_isSignalingNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/f128M_isSignalingNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80M.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80UI.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128M.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128UI.c rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/RISCV}/s_commonNaNToF16UI.c (97%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/RISCV}/s_commonNaNToF32UI.c (97%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/RISCV}/s_commonNaNToF64UI.c (97%) rename {c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN => dependencies/softfloat/berkeley-softfloat-3/source/RISCV}/s_extF80MToCommonNaN.c (97%) create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80UIToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128MToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128UIToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f16UIToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f32UIToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f64UIToCommonNaN.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80M.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80UI.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128M.c create mode 100644 dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128UI.c rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/RISCV/s_propagateNaNF16UI.c (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/RISCV/s_propagateNaNF32UI.c (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/RISCV/s_propagateNaNF64UI.c (98%) rename {c_emulator/SoftFloat-3e/source/8086 => dependencies/softfloat/berkeley-softfloat-3/source/RISCV}/softfloat_raiseFlags.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/RISCV/specialize.h (99%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80M_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/extF80_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_mulAdd.c (96%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128M_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_mulAdd.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f128_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_mulAdd.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f16_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_mulAdd.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f32_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_add.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_div.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_eq.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_eq_signaling.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_isSignalingNaN.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_le.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_le_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_lt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_lt_quiet.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_mul.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_mulAdd.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_rem.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_roundToInt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_sqrt.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_sub.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_i32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_i32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_i64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_i64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_ui32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_ui32_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_ui64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/f64_to_ui64_r_minMag.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i32_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/i64_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/internals.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/opts-GCC.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/primitiveTypes.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/primitives.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/softfloat.h (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/include/softfloat_types.h (98%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_add128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_add256M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addCarryM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addComplCarryM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addMagsExtF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addMagsF128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addMagsF16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addMagsF32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_addMagsF64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_approxRecip32_1.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_approxRecipSqrt32_1.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_approxRecipSqrt_1Ks.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_approxRecip_1Ks.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_compare128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_compare96M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_compareNonnormExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_countLeadingZeros16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_countLeadingZeros32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_countLeadingZeros64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_countLeadingZeros8.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_eq128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_invalidExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_invalidF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_isNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_le128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_lt128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul128By32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul128MTo256M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul128To256M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul64ByShifted32To128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul64To128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mul64To128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mulAddF128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mulAddF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mulAddF16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mulAddF32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_mulAddF64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_negXM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normExtF80SigM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackMToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackMToF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackToExtF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackToF128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackToF16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackToF32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normRoundPackToF64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalExtF80Sig.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalF128Sig.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalF128SigM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalF16Sig.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalF32Sig.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_normSubnormalF64Sig.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_remStepMBy32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundMToI64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundMToUI64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackMToExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackMToF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackToExtF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackToF128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackToF16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackToF32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundPackToF64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundToI32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundToI64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundToUI32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_roundToUI64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftLeftM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftNormSigF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam128Extra.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam256M.c (96%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJam64Extra.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightJamM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shiftRightM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftLeft128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftLeft64To96M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftLeftM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRight128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightExtendM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightJam128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightJam128Extra.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightJam64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightJam64Extra.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightJamM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_shortShiftRightM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_sub128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_sub1XM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_sub256M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subM.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subMagsExtF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subMagsF128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subMagsF16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subMagsF32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_subMagsF64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_tryPropagateNaNExtF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/s_tryPropagateNaNF128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/softfloat_state.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui32_to_f64.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_extF80.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_extF80M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_f128.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_f128M.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_f16.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_f32.c (97%) rename {c_emulator/SoftFloat-3e => dependencies/softfloat/berkeley-softfloat-3}/source/ui64_to_f64.c (97%) create mode 100644 emulator/CMakeLists.txt rename {c_emulator => emulator}/config.json (100%) rename {c_emulator => emulator}/reset_vec.S (100%) rename {c_emulator => emulator}/reset_vec.bin (100%) rename {c_emulator => emulator}/riscv_config.h (100%) rename {c_emulator => emulator}/riscv_platform.c (100%) rename {c_emulator => emulator}/riscv_platform.h (100%) rename {c_emulator => emulator}/riscv_platform_impl.c (100%) rename {c_emulator => emulator}/riscv_platform_impl.h (100%) rename {c_emulator => emulator}/riscv_prelude.c (100%) rename {c_emulator => emulator}/riscv_prelude.h (100%) rename {c_emulator => emulator}/riscv_sail.h (100%) rename {c_emulator => emulator}/riscv_sim.c (100%) create mode 100755 emulator/riscv_sim_RV64 rename {c_emulator => emulator}/riscv_softfloat.c (100%) rename {c_emulator => emulator}/riscv_softfloat.h (100%) create mode 100644 model/CMakeLists.txt create mode 100644 sail_runtime/CMakeLists.txt delete mode 100755 test/get_perf.py delete mode 100644 test/riscv-tests/.gitignore create mode 100644 test/riscv-tests/CMakeLists.txt delete mode 100755 test/run_fp_tests.sh delete mode 100755 test/run_tests.sh diff --git a/.gitignore b/.gitignore index 0079a6798..72da15507 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,7 @@ _build/ _sbuild/ *.o *.a -/z3_problems +z3_problems + +# Typical CMake build directory. +/build diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d8791c06f..6a71e0f61 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ # See https://pre-commit.com for more information # See https://pre-commit.com/hooks.html for more hooks -exclude: '^(prover_snapshots)|(generated_definitions)|(c_emulator/SoftFloat-3e)' +exclude: '^(prover_snapshots)|(generated_definitions)|(dependencies)' minimum_pre_commit_version: 2.10.0 repos: - repo: https://github.com/pre-commit/pre-commit-hooks diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 000000000..63748e4c1 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,76 @@ +cmake_minimum_required(VERSION 3.27) + +project(sail_riscv) + +# Enable CTest +enable_testing() + +# We technically require C++20 since the C generated by Sail - which we compile +# as C++ - uses designated initialisers, a C++20 feature. However in practice +# much older compilers support this feature so everything does work with C++17, +# but you get lots of warnings on compilers that support C++20 if you use +# this feature without -std=c++20. +if (cxx_std_20 IN_LIST CMAKE_CXX_COMPILE_FEATURES) + set(CMAKE_CXX_STANDARD 20) +else() + set(CMAKE_CXX_STANDARD 17) +endif() +set(CMAKE_CXX_STANDARD_REQUIRED TRUE) + +# Export compile_commands.json for IDE support. +set(CMAKE_EXPORT_COMPILE_COMMANDS TRUE) + +# Always use Position Independent Code. By default it is only used for +# shared libraries (which require it), but you also need it for static +# libraries if you link them into shared libraries. +# Generally it just simplifies everything for a negligable performance cost. +set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) + +# Don't allow undefined symbols in shared libraries. This is generally a pain. +if (UNIX) + set(CMAKE_SHARED_LINKER_FLAGS "-Wl,--no-undefined") +endif() + +# Optional faster binary. Increases compilation time a lot though due to LTO. +option(EXTRA_FAST "Enable aggressive optimisation flags (-march=native, -flto, etc)" FALSE) + +if (EXTRA_FAST) + include("cmake/extra_fast.cmake") +endif() + +# Extra CMake files. +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") + +# These are the main requirements. +# Don't use `REQUIRED` so that we can print custom help messages. +find_package(ZLIB) +if (NOT ZLIB_FOUND) + message(FATAL_ERROR "Zlib not found. Try 'sudo apt install zlib1g-dev' or 'sudo dnf install zlib-devel'.") +endif() + +find_package(GMP) +if (NOT GMP_FOUND) + message(FATAL_ERROR "GMP not found. Try 'sudo apt install libgmp3-dev' or 'sudo dnf install gmp-devel'.") +endif() + +find_program(sail "sail") +if (NOT sail) + message(FATAL_ERROR "Sail not found. See README.md for installation instructions.") +endif() + +set(ENABLED_ARCHITECTURES "rv32;rv64" CACHE STRING "Enabled architectures to build (rv32, rv64, rv32d, rv64f)" ) + +# Softfloat support. +add_subdirectory("dependencies/softfloat") + +# Sail C runtime. +add_subdirectory("sail_runtime") + +# Sail model generated C code. +add_subdirectory("model") + +# Emulator binary. +add_subdirectory("emulator") + +# Old pre-compiled riscv-tests. +add_subdirectory("test/riscv-tests") diff --git a/c_emulator/SoftFloat-3e/.clang-format b/c_emulator/SoftFloat-3e/.clang-format deleted file mode 100644 index aa79042cc..000000000 --- a/c_emulator/SoftFloat-3e/.clang-format +++ /dev/null @@ -1,3 +0,0 @@ -# This is third-party code and should not be reformatted -DisableFormat: true -SortIncludes: Never diff --git a/c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h b/c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/c_emulator/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/c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h b/c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/platform.h deleted file mode 100644 index 420aa4e04..000000000 --- a/c_emulator/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/c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/platform.h b/c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/platform.h deleted file mode 100644 index 2fccb6c09..000000000 --- a/c_emulator/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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c b/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128UI.c deleted file mode 100644 index 46b9f5f2c..000000000 --- a/c_emulator/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/cmake/extra_fast.cmake b/cmake/extra_fast.cmake new file mode 100644 index 000000000..745d52d0c --- /dev/null +++ b/cmake/extra_fast.cmake @@ -0,0 +1,28 @@ +include(CheckCXXCompilerFlag) + +# Enable agressive optimisation flags. + +# Try to use -march=x86-64-v3, but fall back to -march=native if we are +# using an old compiler that doesn't support that flag. +check_cxx_compiler_flag("-march=x86-64-v3" COMPILER_SUPPORTS_MARCH_X86_V3) +if (COMPILER_SUPPORTS_MARCH_X86_V3) + message(STATUS "Enabling -march=x86-64-v3") + add_compile_options("-march=x86-64-v3") +else() + # Must be quite old so try -march=native. + check_cxx_compiler_flag("-march=native" COMPILER_SUPPORTS_MARCH_NATIVE) + if (COMPILER_SUPPORTS_MARCH_NATIVE) + message(STATUS "Enabling -march=native") + add_compile_options("-march=native") + endif() +endif() + +# This makes a measurable difference. +check_cxx_compiler_flag("-fomit-frame-pointer" COMPILER_SUPPORTS_FOMIT_FRAME_POINTER) +if (COMPILER_SUPPORTS_FOMIT_FRAME_POINTER) + message(STATUS "Enabling -fomit-frame-pointer") + add_compile_options("-fomit-frame-pointer") +endif() + +# LTO +set(CMAKE_INTERPROCEDURAL_OPTIMIZATION TRUE) diff --git a/cmake/modules/FindGMP.cmake b/cmake/modules/FindGMP.cmake new file mode 100644 index 000000000..0df955a5a --- /dev/null +++ b/cmake/modules/FindGMP.cmake @@ -0,0 +1,51 @@ +# From https://github.com/Z3Prover/z3/blob/7f8e2a9f75f6c8b4b8ab05b87ea6a343d9a0b88d/cmake/modules/FindGMP.cmake + +# Tries to find an install of the GNU multiple precision library +# +# Once done this will define +# GMP_FOUND - BOOL: System has the GMP library installed +# GMP_INCLUDE_DIRS - LIST:The GMP include directories +# GMP_C_LIBRARIES - LIST:The libraries needed to use GMP via it's C interface +# GMP_CXX_LIBRARIES - LIST:The libraries needed to use GMP via it's C++ interface + +include(FindPackageHandleStandardArgs) + +# Try to find libraries +find_library(GMP_C_LIBRARIES + NAMES gmp + DOC "GMP C libraries" +) +find_library(GMP_CXX_LIBRARIES + NAMES gmpxx + DOC "GMP C++ libraries" +) + +# Try to find headers +find_path(GMP_C_INCLUDES + NAMES gmp.h + DOC "GMP C header" +) + +find_path(GMP_CXX_INCLUDES + NAMES gmpxx.h + DOC "GMP C++ header" +) + +# TODO: We should check we can link some simple code against libgmp and libgmpxx + +# Handle QUIET and REQUIRED and check the necessary variables were set and if so +# set ``GMP_FOUND`` +find_package_handle_standard_args(GMP + REQUIRED_VARS GMP_C_LIBRARIES GMP_C_INCLUDES GMP_CXX_LIBRARIES GMP_CXX_INCLUDES) + +if (GMP_FOUND) + set(GMP_INCLUDE_DIRS "${GMP_C_INCLUDES}" "${GMP_CXX_INCLUDES}") + list(REMOVE_DUPLICATES GMP_INCLUDE_DIRS) + + if (NOT TARGET GMP::GMP) + add_library(GMP::GMP UNKNOWN IMPORTED) + set_target_properties(GMP::GMP PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${GMP_C_INCLUDES}" + IMPORTED_LOCATION "${GMP_C_LIBRARIES}") + endif() +endif() diff --git a/dependencies/softfloat/CMakeLists.txt b/dependencies/softfloat/CMakeLists.txt new file mode 100644 index 000000000..665017009 --- /dev/null +++ b/dependencies/softfloat/CMakeLists.txt @@ -0,0 +1,44 @@ +SET(source_dir "${CMAKE_CURRENT_SOURCE_DIR}/berkeley-softfloat-3") + +# Generic source plus RISC-V specific source. +file(GLOB riscv_source + "${source_dir}/source/*.c" + "${source_dir}/source/include/*.h" + "${source_dir}/source/RISCV/*.c" + "${source_dir}/source/RISCV/*.h" + "${source_dir}/build/Linux-RISCV-GCC/platform.h" +) + +# Some files do not work with SOFTFLOAT_FAST_INT64 +list(REMOVE_ITEM riscv_source + "${source_dir}/source/s_addExtF80M.c" + "${source_dir}/source/s_addF128M.c" + "${source_dir}/source/s_compareNonnormExtF80M.c" + "${source_dir}/source/s_invalidF128M.c" + "${source_dir}/source/s_mulAddF128M.c" + "${source_dir}/source/s_normRoundPackMToExtF80M.c" + "${source_dir}/source/s_normRoundPackMToF128M.c" + "${source_dir}/source/s_normSubnormalF128SigM.c" + "${source_dir}/source/s_roundPackMToExtF80M.c" + "${source_dir}/source/s_roundPackMToF128M.c" + "${source_dir}/source/s_shiftLeftM.c" + "${source_dir}/source/s_shiftNormSigF128M.c" + "${source_dir}/source/s_shiftRightJamM.c" + "${source_dir}/source/s_shiftRightM.c" + "${source_dir}/source/s_tryPropagateNaNExtF80M.c" + "${source_dir}/source/s_tryPropagateNaNF128M.c" + "${source_dir}/source/RISCV/s_propagateNaNF128M.c" + "${source_dir}/source/RISCV/s_commonNaNToF128M.c" +) + +add_library(softfloat + ${riscv_source} +) + +target_include_directories(softfloat PUBLIC + "${source_dir}/source/include" + "${source_dir}/source/RISCV" + "${source_dir}/build/Linux-RISCV-GCC" +) + +target_compile_options(softfloat PRIVATE "-Werror=implicit-function-declaration" "-DSOFTFLOAT_ROUND_ODD") diff --git a/dependencies/softfloat/berkeley-softfloat-3/.gitignore b/dependencies/softfloat/berkeley-softfloat-3/.gitignore new file mode 100644 index 000000000..bfdb59292 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/.gitignore @@ -0,0 +1,2 @@ +build/*/*.o +build/*/*.a diff --git a/c_emulator/SoftFloat-3e/COPYING.txt b/dependencies/softfloat/berkeley-softfloat-3/COPYING.txt similarity index 97% rename from c_emulator/SoftFloat-3e/COPYING.txt rename to dependencies/softfloat/berkeley-softfloat-3/COPYING.txt index 9c05d49ca..b5690face 100644 --- a/c_emulator/SoftFloat-3e/COPYING.txt +++ b/dependencies/softfloat/berkeley-softfloat-3/COPYING.txt @@ -1,37 +1,37 @@ - -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. - + +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/c_emulator/SoftFloat-3e/README.html b/dependencies/softfloat/berkeley-softfloat-3/README.html similarity index 96% rename from c_emulator/SoftFloat-3e/README.html rename to dependencies/softfloat/berkeley-softfloat-3/README.html index 7989e0c26..e695c2bd8 100644 --- a/c_emulator/SoftFloat-3e/README.html +++ b/dependencies/softfloat/berkeley-softfloat-3/README.html @@ -1,49 +1,49 @@ - - - - -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. -

- - - + + + + +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/dependencies/softfloat/berkeley-softfloat-3/README.md b/dependencies/softfloat/berkeley-softfloat-3/README.md new file mode 100644 index 000000000..d46802049 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/README.md @@ -0,0 +1,24 @@ + +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](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat.html) Documentation for using the SoftFloat functions. +* [SoftFloat-source.html](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat-source.html) Documentation for building SoftFloat. +* [SoftFloat-history.html](http://www.jhauser.us/arithmetic/SoftFloat-3/doc/SoftFloat-history.html) History of the major changes to SoftFloat. + +Other files in the package comprise the source code for SoftFloat. + diff --git a/c_emulator/SoftFloat-3e/README.txt b/dependencies/softfloat/berkeley-softfloat-3/README.txt similarity index 97% rename from c_emulator/SoftFloat-3e/README.txt rename to dependencies/softfloat/berkeley-softfloat-3/README.txt index f819baa5c..1613c7671 100644 --- a/c_emulator/SoftFloat-3e/README.txt +++ b/dependencies/softfloat/berkeley-softfloat-3/README.txt @@ -1,21 +1,21 @@ - -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. - + +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/c_emulator/SoftFloat-3e/build/Linux-386-GCC/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Linux-386-GCC/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/Makefile index 418160051..faeb39728 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-386-GCC/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/Makefile @@ -1,325 +1,325 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/platform.h similarity index 97% rename from c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/platform.h index 420aa4e04..d514dbc40 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-GCC/platform.h @@ -1,53 +1,53 @@ - -/*============================================================================ - -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" - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/Makefile index 1cf6f5e1a..ced977b69 100644 --- a/c_emulator/SoftFloat-3e/build/Win32-SSE2-MinGW/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/Makefile @@ -1,325 +1,325 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/platform.h similarity index 97% rename from c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/platform.h index 420aa4e04..d514dbc40 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-386-SSE2-GCC/platform.h @@ -1,53 +1,53 @@ - -/*============================================================================ - -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" - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/Makefile index 2565fe56c..a1e7c8303 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-ARM-VFPv2-GCC/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/Makefile @@ -1,323 +1,323 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/Linux-386-GCC/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/platform.h similarity index 97% rename from c_emulator/SoftFloat-3e/build/Linux-386-GCC/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/platform.h index 420aa4e04..d514dbc40 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-386-GCC/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-ARM-VFPv2-GCC/platform.h @@ -1,53 +1,53 @@ - -/*============================================================================ - -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" - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-RISCV-GCC/Makefile similarity index 99% rename from c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-RISCV-GCC/Makefile index 8cddff6f6..9600548a0 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-RISCV-GCC/Makefile @@ -44,7 +44,7 @@ SOFTFLOAT_OPTS ?= \ DELETE = rm -f C_INCLUDES = -I. -I$(SOURCE_DIR)/$(SPECIALIZE_TYPE) -I$(SOURCE_DIR)/include COMPILE_C = \ - $(CC) -c -Werror-implicit-function-declaration \ + gcc -c -Werror-implicit-function-declaration \ $(SOFTFLOAT_OPTS) $(C_INCLUDES) -O2 -o $@ MAKELIB = ar crs $@ @@ -378,4 +378,3 @@ softfloat$(LIB): $(OBJS_ALL) .PHONY: clean clean: $(DELETE) $(OBJS_ALL) softfloat$(LIB) - diff --git a/c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-RISCV-GCC/platform.h similarity index 100% rename from c_emulator/SoftFloat-3e/build/Linux-RISCV-GCC/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-RISCV-GCC/platform.h diff --git a/c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/Makefile index 570337825..2ee5dad84 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-x86_64-GCC/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/Makefile @@ -1,390 +1,390 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/Win32-MinGW/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/platform.h similarity index 97% rename from c_emulator/SoftFloat-3e/build/Win32-MinGW/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/platform.h index 420aa4e04..c5e06f8e9 100644 --- a/c_emulator/SoftFloat-3e/build/Win32-MinGW/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Linux-x86_64-GCC/platform.h @@ -1,53 +1,54 @@ - -/*============================================================================ - -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" - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Win32-MinGW/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Win32-MinGW/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/Makefile index 418160051..faeb39728 100644 --- a/c_emulator/SoftFloat-3e/build/Win32-MinGW/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/Makefile @@ -1,325 +1,325 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/platform.h new file mode 100644 index 000000000..d514dbc40 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-MinGW/platform.h @@ -0,0 +1,53 @@ + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/Makefile index 1cf6f5e1a..ced977b69 100644 --- a/c_emulator/SoftFloat-3e/build/Linux-386-SSE2-GCC/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/Makefile @@ -1,325 +1,325 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/platform.h new file mode 100644 index 000000000..d514dbc40 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win32-SSE2-MinGW/platform.h @@ -0,0 +1,53 @@ + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/Makefile index 05bbf5bb5..cc5bc0c5b 100644 --- a/c_emulator/SoftFloat-3e/build/Win64-MinGW-w64/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/Makefile @@ -1,390 +1,390 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/platform.h new file mode 100644 index 000000000..c5e06f8e9 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/build/Win64-MinGW-w64/platform.h @@ -0,0 +1,54 @@ + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/template-FAST_INT64/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/template-FAST_INT64/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/Makefile index c5005e6e3..78e7ff5aa 100644 --- a/c_emulator/SoftFloat-3e/build/template-FAST_INT64/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/Makefile @@ -1,391 +1,391 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/template-FAST_INT64/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/platform.h similarity index 98% rename from c_emulator/SoftFloat-3e/build/template-FAST_INT64/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/platform.h index b63e2a720..20946587b 100644 --- a/c_emulator/SoftFloat-3e/build/template-FAST_INT64/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/template-FAST_INT64/platform.h @@ -1,50 +1,50 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/Makefile b/dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/Makefile similarity index 96% rename from c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/Makefile rename to dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/Makefile index 49fddfd02..48b2cd6bf 100644 --- a/c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/Makefile +++ b/dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/Makefile @@ -1,325 +1,325 @@ - -#============================================================================= -# -# 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) - + +#============================================================================= +# +# 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/c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/platform.h b/dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/platform.h similarity index 98% rename from c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/platform.h rename to dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/platform.h index b63e2a720..20946587b 100644 --- a/c_emulator/SoftFloat-3e/build/template-not-FAST_INT64/platform.h +++ b/dependencies/softfloat/berkeley-softfloat-3/build/template-not-FAST_INT64/platform.h @@ -1,50 +1,50 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/doc/SoftFloat-history.html b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-history.html similarity index 95% rename from c_emulator/SoftFloat-3e/doc/SoftFloat-history.html rename to dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-history.html index daa48ca3b..d81c6bc5a 100644 --- a/c_emulator/SoftFloat-3e/doc/SoftFloat-history.html +++ b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-history.html @@ -1,258 +1,258 @@ - - - - -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. - -
- - - - + + + + +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/c_emulator/SoftFloat-3e/doc/SoftFloat-source.html b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-source.html similarity index 97% rename from c_emulator/SoftFloat-3e/doc/SoftFloat-source.html rename to dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-source.html index d4b85f7b0..4ff9d4c45 100644 --- a/c_emulator/SoftFloat-3e/doc/SoftFloat-source.html +++ b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat-source.html @@ -1,686 +1,686 @@ - - - - -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. -

- - - - + + + + +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/c_emulator/SoftFloat-3e/doc/SoftFloat.html b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat.html similarity index 97% rename from c_emulator/SoftFloat-3e/doc/SoftFloat.html rename to dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat.html index bb41770ec..8367d6fa4 100644 --- a/c_emulator/SoftFloat-3e/doc/SoftFloat.html +++ b/dependencies/softfloat/berkeley-softfloat-3/doc/SoftFloat.html @@ -1,1527 +1,1527 @@ - - - - -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. -

- - - - + + + + +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 across 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/c_emulator/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/extF80M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/extF80M_isSignalingNaN.c index 85ee211c2..c2cca65c9 100644 --- a/c_emulator/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/extF80M_isSignalingNaN.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/f128M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/f128M_isSignalingNaN.c index 79a707771..9ff83d726 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/f128M_isSignalingNaN.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80M.c index 3405b3ba4..06302aa15 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80UI.c index cb7424f43..7325468ff 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToExtF80UI.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128M.c index e7ea80258..e2940bb77 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128UI.c index 7a9423bea..ac8ea7b70 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF128UI.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF16UI.c index d4e458a94..07679d717 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF16UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF32UI.c index ed6c2268f..982c1edf6 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF32UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF64UI.c index 1182be3c9..d88c68ade 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_commonNaNToF64UI.c @@ -1,53 +1,53 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80MToCommonNaN.c index 00baf35f8..6bf45cf86 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80UIToCommonNaN.c index ab6311ef2..8b8c92780 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_extF80UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_extF80UIToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128MToCommonNaN.c index 55ec25b58..22152145a 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128UIToCommonNaN.c index f838f02aa..2510c0707 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_f128UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f128UIToCommonNaN.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f16UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f16UIToCommonNaN.c index c1e242d23..4d5003f6a 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f16UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f32UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f32UIToCommonNaN.c index b21ba6603..f4734db7a 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f32UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f64UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f64UIToCommonNaN.c index 6529d2ee5..9a481a74f 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_f64UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80M.c index ea1d57a78..f35e06654 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80M.c @@ -1,107 +1,107 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80UI.c index cc3f0f42c..fa2daae2e 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNExtF80UI.c @@ -1,106 +1,106 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128M.c index aa903bf80..e8872742c 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128M.c @@ -1,76 +1,76 @@ - -/*============================================================================ - -This 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 )]; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128UI.c index 1c1c2f4a0..fb0e862dc 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF128UI.c @@ -1,81 +1,81 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF16UI.c index 4e87ff41f..8e19e4301 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF16UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF32UI.c index e1a875525..6e423cac6 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF32UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF64UI.c index 1af349f3e..474c1967d 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/s_propagateNaNF64UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/RISCV/softfloat_raiseFlags.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/softfloat_raiseFlags.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/softfloat_raiseFlags.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/softfloat_raiseFlags.c diff --git a/c_emulator/SoftFloat-3e/source/8086-SSE/specialize.h b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/specialize.h similarity index 98% rename from c_emulator/SoftFloat-3e/source/8086-SSE/specialize.h rename to dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/specialize.h index 5fe119a1e..a9166e170 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/specialize.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086-SSE/specialize.h @@ -1,376 +1,376 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/extF80M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/extF80M_isSignalingNaN.c index 85ee211c2..c2cca65c9 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/extF80M_isSignalingNaN.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/f128M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/f128M_isSignalingNaN.c index 79a707771..9ff83d726 100644 --- a/c_emulator/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/f128M_isSignalingNaN.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80M.c index 3405b3ba4..06302aa15 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80UI.c index cb7424f43..7325468ff 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToExtF80UI.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128M.c index e7ea80258..e2940bb77 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128UI.c index 7a9423bea..ac8ea7b70 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF128UI.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF16UI.c index d4e458a94..07679d717 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF16UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF32UI.c index ed6c2268f..982c1edf6 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_commonNaNToF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF32UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF64UI.c index 1182be3c9..d88c68ade 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_commonNaNToF64UI.c @@ -1,53 +1,53 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80MToCommonNaN.c index 00baf35f8..6bf45cf86 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80UIToCommonNaN.c index ab6311ef2..8b8c92780 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_extF80UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_extF80UIToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128MToCommonNaN.c index 55ec25b58..22152145a 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_f128MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128UIToCommonNaN.c index f838f02aa..2510c0707 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_f128UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f128UIToCommonNaN.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f16UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f16UIToCommonNaN.c index c1e242d23..4d5003f6a 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_f16UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f16UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f32UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f32UIToCommonNaN.c index b21ba6603..f4734db7a 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_f32UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f32UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f64UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f64UIToCommonNaN.c index 6529d2ee5..9a481a74f 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_f64UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_f64UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80M.c index ea1d57a78..f35e06654 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80M.c @@ -1,107 +1,107 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80UI.c index cc3f0f42c..fa2daae2e 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/s_propagateNaNExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNExtF80UI.c @@ -1,106 +1,106 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF128M.c index 06554fbfe..7ac2e5f63 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF128M.c @@ -1,108 +1,108 @@ - -/*============================================================================ - -This 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 )]; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF128UI.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF128UI.c diff --git a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF16UI.c index 89cc0fe97..f9d80d6ac 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF16UI.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF32UI.c index aeb6024ac..2350ad7c0 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF32UI.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF64UI.c index dabad4024..a4013d489 100644 --- a/c_emulator/SoftFloat-3e/source/8086/s_propagateNaNF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/s_propagateNaNF64UI.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c b/dependencies/softfloat/berkeley-softfloat-3/source/8086/softfloat_raiseFlags.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/softfloat_raiseFlags.c index 3115306be..7a1aee930 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/softfloat_raiseFlags.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/softfloat_raiseFlags.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086/specialize.h b/dependencies/softfloat/berkeley-softfloat-3/source/8086/specialize.h similarity index 98% rename from c_emulator/SoftFloat-3e/source/8086/specialize.h rename to dependencies/softfloat/berkeley-softfloat-3/source/8086/specialize.h index 5fe119a1e..a9166e170 100644 --- a/c_emulator/SoftFloat-3e/source/8086/specialize.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/8086/specialize.h @@ -1,376 +1,376 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c index 85ee211c2..c2cca65c9 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/extF80M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/extF80M_isSignalingNaN.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c index 79a707771..9ff83d726 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/f128M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/f128M_isSignalingNaN.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c index 54a50dc35..2e6bf7c75 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80M.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c index 5b698f664..e37004f7f 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToExtF80UI.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c index b22baa816..2ff4c1631 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128M.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c index 70f0cf1c6..05dfb5f14 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF128UI.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c diff --git a/c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/s_commonNaNToF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c diff --git a/c_emulator/SoftFloat-3e/source/RISCV/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/s_f32UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c diff --git a/c_emulator/SoftFloat-3e/source/RISCV/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c similarity index 100% rename from c_emulator/SoftFloat-3e/source/RISCV/s_f64UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_extF80UIToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128MToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f128UIToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f16UIToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f32UIToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_f64UIToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c index 1c6510c7e..827ed5e3a 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80M.c @@ -1,74 +1,74 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c index e1bb1555a..e2ddd937e 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNExtF80UI.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c index 9bddee955..b876ae1f1 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128M.c @@ -1,68 +1,68 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c index 57fddd158..31b788e0c 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF128UI.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c index 0b08e0039..17618fc2e 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF16UI.c @@ -1,58 +1,58 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c index cab740358..e4c3fc1a8 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF32UI.c @@ -1,58 +1,58 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c index 83b91d3a9..75361b8e2 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/s_propagateNaNF64UI.c @@ -1,58 +1,58 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c index 61046da3c..f8f106570 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/softfloat_raiseFlags.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/specialize.h similarity index 98% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/specialize.h index 2c481a259..e4ea15d14 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/specialize.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2-defaultNaN/specialize.h @@ -1,407 +1,407 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/extF80M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/extF80M_isSignalingNaN.c index 85ee211c2..c2cca65c9 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/extF80M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/extF80M_isSignalingNaN.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/f128M_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/f128M_isSignalingNaN.c index 79a707771..9ff83d726 100644 --- a/c_emulator/SoftFloat-3e/source/8086-SSE/f128M_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/f128M_isSignalingNaN.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80M.c index 543400bc1..6bb922a1d 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80UI.c index 6cf1d1191..5e841b253 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToExtF80UI.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128M.c index 4e8ede07f..02e234853 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128M.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128UI.c index f938c3f2d..fa87d75fa 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF128UI.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF16UI.c index 6cd4fc192..6d5bf9ab3 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF16UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF32UI.c index 7b38167f0..e45d63b3b 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF32UI.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF64UI.c index 14847029d..bfde88bbc 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_commonNaNToF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_commonNaNToF64UI.c @@ -1,53 +1,53 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80MToCommonNaN.c index 82216cf41..5fd54dbbd 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80UIToCommonNaN.c index 2559fb6d2..9c0f0ca08 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_extF80UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_extF80UIToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128MToCommonNaN.c index 322d25ab1..e54756b10 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128MToCommonNaN.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128UIToCommonNaN.c index 843c187a7..27952a775 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f128UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f128UIToCommonNaN.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f16UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f16UIToCommonNaN.c index f5fe58770..ee1928eb3 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f16UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f16UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f32UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f32UIToCommonNaN.c index 58726a357..249e47825 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f32UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f32UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f64UIToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f64UIToCommonNaN.c index 03761e433..adca2d047 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_f64UIToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_f64UIToCommonNaN.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80M.c index f10ed0b62..1c142562e 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80M.c @@ -1,86 +1,86 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80UI.c index bd23c2473..be95414ac 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNExtF80UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNExtF80UI.c @@ -1,83 +1,83 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128M.c index 23e766a19..6a30052cb 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128M.c @@ -1,77 +1,77 @@ - -/*============================================================================ - -This 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 )]; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128UI.c index b8882d77c..5aece622e 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF128UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF128UI.c @@ -1,83 +1,83 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF16UI.c index e33332874..880146033 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF16UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF32UI.c index c7508ae7c..31b289e9d 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF32UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF64UI.c index 8c6776381..224049ab1 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/s_propagateNaNF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/s_propagateNaNF64UI.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/softfloat_raiseFlags.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/softfloat_raiseFlags.c index 61046da3c..f8f106570 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/softfloat_raiseFlags.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/softfloat_raiseFlags.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ARM-VFPv2/specialize.h b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/specialize.h similarity index 98% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2/specialize.h rename to dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/specialize.h index 5321f33bc..10b0b357f 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2/specialize.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ARM-VFPv2/specialize.h @@ -1,376 +1,376 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/extF80M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/extF80M_isSignalingNaN.c new file mode 100644 index 000000000..c2cca65c9 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/extF80M_isSignalingNaN.c @@ -0,0 +1,57 @@ + +/*============================================================================ + +This 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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/f128M_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/f128M_isSignalingNaN.c new file mode 100644 index 000000000..9ff83d726 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/f128M_isSignalingNaN.c @@ -0,0 +1,60 @@ + +/*============================================================================ + +This 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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80M.c new file mode 100644 index 000000000..6d1e67e5f --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80M.c @@ -0,0 +1,57 @@ + +/*============================================================================ + +This 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 "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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80UI.c new file mode 100644 index 000000000..953b97a78 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToExtF80UI.c @@ -0,0 +1,57 @@ + +/*============================================================================ + +This 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 "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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128M.c new file mode 100644 index 000000000..d91b62e17 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128M.c @@ -0,0 +1,60 @@ + +/*============================================================================ + +This 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" + +#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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128UI.c new file mode 100644 index 000000000..b4c578dc7 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF128UI.c @@ -0,0 +1,56 @@ + +/*============================================================================ + +This 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 "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/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF16UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF16UI.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF16UI.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF32UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF32UI.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF32UI.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF64UI.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF64UI.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_commonNaNToF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_commonNaNToF64UI.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80MToCommonNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80MToCommonNaN.c index 7c7d5c82e..861b26965 100644 --- a/c_emulator/SoftFloat-3e/source/ARM-VFPv2-defaultNaN/s_extF80MToCommonNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80MToCommonNaN.c @@ -1,5 +1,5 @@ - -/*---------------------------------------------------------------------------- -| This file intentionally contains no code. -*----------------------------------------------------------------------------*/ - + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80UIToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_extF80UIToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128MToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128MToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128MToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128UIToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f128UIToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f16UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f16UIToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f16UIToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f32UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f32UIToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f32UIToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f64UIToCommonNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f64UIToCommonNaN.c new file mode 100644 index 000000000..861b26965 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_f64UIToCommonNaN.c @@ -0,0 +1,5 @@ + +/*---------------------------------------------------------------------------- +| This file intentionally contains no code. +*----------------------------------------------------------------------------*/ + diff --git a/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80M.c new file mode 100644 index 000000000..8adc62e9b --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80M.c @@ -0,0 +1,74 @@ + +/*============================================================================ + +This 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" +#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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80UI.c new file mode 100644 index 000000000..88bfee5ff --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNExtF80UI.c @@ -0,0 +1,73 @@ + +/*============================================================================ + +This 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" +#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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128M.c new file mode 100644 index 000000000..df76ab235 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128M.c @@ -0,0 +1,68 @@ + +/*============================================================================ + +This 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, 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 "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/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128UI.c new file mode 100644 index 000000000..49e253539 --- /dev/null +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF128UI.c @@ -0,0 +1,73 @@ + +/*============================================================================ + +This 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" +#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/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF16UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF16UI.c similarity index 98% rename from c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF16UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF16UI.c index 3ecd4c982..228dcd8de 100644 --- a/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF16UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF16UI.c @@ -2,7 +2,7 @@ /*============================================================================ This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3d, by John R. Hauser. +Package, Release 3e, by John R. Hauser. Copyright 2011, 2012, 2013, 2014, 2015, 2016 The Regents of the University of California. All rights reserved. diff --git a/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF32UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF32UI.c similarity index 98% rename from c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF32UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF32UI.c index b97fa4145..c6308cc32 100644 --- a/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF32UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF32UI.c @@ -2,7 +2,7 @@ /*============================================================================ This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3d, by John R. Hauser. +Package, Release 3e, by John R. Hauser. Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of California. All rights reserved. diff --git a/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF64UI.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF64UI.c similarity index 98% rename from c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF64UI.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF64UI.c index 9c2d35983..220366553 100644 --- a/c_emulator/SoftFloat-3e/source/RISCV/s_propagateNaNF64UI.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/s_propagateNaNF64UI.c @@ -2,7 +2,7 @@ /*============================================================================ This C source file is part of the SoftFloat IEEE Floating-Point Arithmetic -Package, Release 3d, by John R. Hauser. +Package, Release 3e, by John R. Hauser. Copyright 2011, 2012, 2013, 2014, 2015 The Regents of the University of California. All rights reserved. diff --git a/c_emulator/SoftFloat-3e/source/8086/softfloat_raiseFlags.c b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/softfloat_raiseFlags.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/8086/softfloat_raiseFlags.c rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/softfloat_raiseFlags.c index 3115306be..7a1aee930 100644 --- a/c_emulator/SoftFloat-3e/source/8086/softfloat_raiseFlags.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/softfloat_raiseFlags.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/RISCV/specialize.h b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/specialize.h similarity index 99% rename from c_emulator/SoftFloat-3e/source/RISCV/specialize.h rename to dependencies/softfloat/berkeley-softfloat-3/source/RISCV/specialize.h index 509c241ee..c6382646f 100644 --- a/c_emulator/SoftFloat-3e/source/RISCV/specialize.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/RISCV/specialize.h @@ -65,9 +65,9 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #define ui64_fromPosOverflow UINT64_C( 0xFFFFFFFFFFFFFFFF ) #define ui64_fromNegOverflow 0 #define ui64_fromNaN UINT64_C( 0xFFFFFFFFFFFFFFFF ) -#define i64_fromPosOverflow UINT64_C( 0x7FFFFFFFFFFFFFFF ) -#define i64_fromNegOverflow (-UINT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) -#define i64_fromNaN UINT64_C( 0x7FFFFFFFFFFFFFFF ) +#define i64_fromPosOverflow INT64_C( 0x7FFFFFFFFFFFFFFF ) +#define i64_fromNegOverflow (-INT64_C( 0x7FFFFFFFFFFFFFFF ) - 1) +#define i64_fromNaN INT64_C( 0x7FFFFFFFFFFFFFFF ) /*---------------------------------------------------------------------------- | "Common NaN" structure, used to transfer NaN representations from one format diff --git a/c_emulator/SoftFloat-3e/source/extF80M_add.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_add.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_add.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_add.c index 02e415fcc..4ba6a311c 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_add.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_add.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_div.c index 4d543ce9e..24c069a98 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_div.c @@ -1,194 +1,194 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq.c index e17aa2435..248003710 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq_signaling.c index c4a732239..785eba1eb 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_eq_signaling.c @@ -1,92 +1,92 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le.c index e54eb9eea..24edae877 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le.c @@ -1,106 +1,106 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le_quiet.c index 943f26206..3880e36d5 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_le_quiet.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt.c index cbc562f64..70fa8f05d 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt.c @@ -1,106 +1,106 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt_quiet.c index 650586d02..b119af308 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_lt_quiet.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_mul.c index 281394f71..273444900 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_mul.c @@ -1,139 +1,139 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_rem.c index 4aff18ae9..065e271a7 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_rem.c @@ -1,204 +1,204 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_roundToInt.c index 2e8572957..ff4ae876a 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_roundToInt.c @@ -1,176 +1,176 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sqrt.c index 7ee91e0e5..21c15da07 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sqrt.c @@ -1,180 +1,180 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sub.c index 5d1895c7a..4f9f1a623 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_sub.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f128M.c index da81e8d6b..c0306af82 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f128M.c @@ -1,125 +1,125 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f16.c index 5ae38d0c4..7ff56de2d 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f16.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f32.c index 47cf224dc..bb1166f97 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f32.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f64.c index 5f8f4aa29..696255f87 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_f64.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32.c index 06394e341..c0464b138 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32_r_minMag.c index 5f5cf599d..9a803cc23 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i32_r_minMag.c @@ -1,120 +1,120 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i64_r_minMag.c index ec9b92844..07282cd42 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_i64_r_minMag.c @@ -1,115 +1,115 @@ - -/*============================================================================ - -This 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 + +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 - + +/*============================================================================ + +This 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 + 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/c_emulator/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui32_r_minMag.c index e28b08d70..c09e48341 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui32_r_minMag.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui64_r_minMag.c index 87d80897b..bf4839032 100644 --- a/c_emulator/SoftFloat-3e/source/extF80M_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80M_to_ui64_r_minMag.c @@ -1,108 +1,108 @@ - -/*============================================================================ - -This 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 "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 - -} - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/extF80_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_div.c index 28dfb13de..7d649c549 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_div.c @@ -1,203 +1,203 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq.c index efcbc3714..60f29dafa 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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))); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq_signaling.c index 193b191e6..5a0dfe4aa 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_eq_signaling.c @@ -1,67 +1,67 @@ - -/*============================================================================ - -This 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))); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_isSignalingNaN.c index 33d2abd7e..6086f4b70 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_isSignalingNaN.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_le.c index 4e23c5142..2a1ee60f6 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_le.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_le_quiet.c index 9839e47f9..5d0c3ae73 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_le_quiet.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt.c index a4ac69fa6..9560d8ecc 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt_quiet.c index 00f4d4768..711652c7d 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_lt_quiet.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_mul.c index 39ce4012c..c0c50a6ca 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_mul.c @@ -1,158 +1,158 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_rem.c index 5ad977526..a2ebaad81 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_rem.c @@ -1,225 +1,225 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_roundToInt.c index 6c12d84c9..8103dae8f 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_roundToInt.c @@ -1,154 +1,154 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_sqrt.c index af8c496e1..5d328a0e4 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_sqrt.c @@ -1,176 +1,176 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_sub.c index 770c7563a..494d3162c 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_sub.c @@ -1,80 +1,80 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f128.c index 4de90ae31..7fbc9cb69 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f128.c @@ -1,75 +1,75 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f16.c index 5919403fb..ca5050f4c 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f16.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f32.c index 77fcfdc11..357f56e9d 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f32.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f64.c index 410d6622c..c38739925 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_f64.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32.c index 9acdc3c9b..549ca7659 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32.c @@ -1,83 +1,83 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32_r_minMag.c index 03224678a..2b7b9e2b2 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i32_r_minMag.c @@ -1,97 +1,97 @@ - -/*============================================================================ - -This 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_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 ); - -} - + +/*============================================================================ + +This 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 + 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/c_emulator/SoftFloat-3e/source/extF80_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i64_r_minMag.c index 8871d01d1..215876da7 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_i64_r_minMag.c @@ -1,94 +1,94 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_ui32.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_ui32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32.c index 581297731..d121c4801 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_ui32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32.c @@ -1,83 +1,83 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32_r_minMag.c index be2c53b1d..ad3048340 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui32_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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_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 ); - -} - + +/*============================================================================ + +This 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 + 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/c_emulator/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui64_r_minMag.c index eca688c65..65adfe7e8 100644 --- a/c_emulator/SoftFloat-3e/source/extF80_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/extF80_to_ui64_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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 "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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/f128M_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_div.c index b443548f5..8355dc20a 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_div.c @@ -1,187 +1,187 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq.c index 497fdbf6f..4f28f5f31 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq_signaling.c index a9fa4d510..d2ea5f434 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_eq_signaling.c @@ -1,92 +1,92 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_le.c index 7306e45c3..af1dcba74 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_le.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_le_quiet.c index d9e442942..0d051b656 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_le_quiet.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt.c index d2f797fea..64ff9b45d 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt_quiet.c index adbddea71..6ccf3c861 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_lt_quiet.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_mul.c index 4b8292a27..f2d6051e0 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_mul.c @@ -1,158 +1,158 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_mulAdd.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_mulAdd.c similarity index 96% rename from c_emulator/SoftFloat-3e/source/f128M_mulAdd.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_mulAdd.c index 2b0b7fe26..e2f95df01 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_mulAdd.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_mulAdd.c @@ -1,92 +1,92 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_rem.c index 39aafdd6a..645ec9938 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_rem.c @@ -1,182 +1,182 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_roundToInt.c index b96d742b2..c46712656 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_roundToInt.c @@ -1,223 +1,223 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/f128M_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_sub.c index 5d65c799f..1b609fdab 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_sub.c @@ -1,97 +1,97 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_extF80M.c index b0340c794..fe8b0fc81 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_extF80M.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f16.c index 95109a771..4f0c5bb2a 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f16.c @@ -1,113 +1,113 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f32.c index 4542deb0c..8b73de08e 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f32.c @@ -1,109 +1,109 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f64.c index 6213bb7f5..1cddd347a 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_f64.c @@ -1,112 +1,112 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32.c index 54cc6f603..1265c60ad 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32_r_minMag.c index 1f22039de..dde3dea2b 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i32_r_minMag.c @@ -1,106 +1,106 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/f128M_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i64_r_minMag.c index da3d28ad0..bcc79502f 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_i64_r_minMag.c @@ -1,124 +1,124 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_ui32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_ui32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32.c index c1baa063a..33ed93a3f 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_ui32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32_r_minMag.c index a1aca621a..87813c04a 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui32_r_minMag.c @@ -1,102 +1,102 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui64_r_minMag.c index 7a1b60295..503a6058c 100644 --- a/c_emulator/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128M_to_ui64_r_minMag.c @@ -1,114 +1,114 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_add.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_add.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_add.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_add.c index e9caba682..2f6c6b5ae 100644 --- a/c_emulator/SoftFloat-3e/source/f128_add.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_add.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_div.c index 0693db754..dcd3ecbde 100644 --- a/c_emulator/SoftFloat-3e/source/f128_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_div.c @@ -1,199 +1,199 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_eq.c index 9462fc2ab..65183daee 100644 --- a/c_emulator/SoftFloat-3e/source/f128_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_eq.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 ))) - ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_eq_signaling.c index 5d0819d29..892b7da1e 100644 --- a/c_emulator/SoftFloat-3e/source/f128_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_eq_signaling.c @@ -1,67 +1,67 @@ - -/*============================================================================ - -This 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 ))) - ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_isSignalingNaN.c index a764ff6bf..f8e5d2368 100644 --- a/c_emulator/SoftFloat-3e/source/f128_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_isSignalingNaN.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_le.c index 521a1cb03..28d452bd0 100644 --- a/c_emulator/SoftFloat-3e/source/f128_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_le.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_le_quiet.c index 820b28b81..f3ea5a65d 100644 --- a/c_emulator/SoftFloat-3e/source/f128_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_le_quiet.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_lt.c index fa46ae2bc..97589a47f 100644 --- a/c_emulator/SoftFloat-3e/source/f128_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_lt.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_lt_quiet.c index d491de2f2..0daf32958 100644 --- a/c_emulator/SoftFloat-3e/source/f128_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_lt_quiet.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_mul.c index 24af86a24..7dff6edfe 100644 --- a/c_emulator/SoftFloat-3e/source/f128_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_mul.c @@ -1,163 +1,163 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_mulAdd.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_mulAdd.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_mulAdd.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_mulAdd.c index c7272d4e0..8d4850e6a 100644 --- a/c_emulator/SoftFloat-3e/source/f128_mulAdd.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_mulAdd.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_rem.c index f525f697a..28d3df6cb 100644 --- a/c_emulator/SoftFloat-3e/source/f128_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_rem.c @@ -1,190 +1,190 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_roundToInt.c index 69185d6ef..96ae30e34 100644 --- a/c_emulator/SoftFloat-3e/source/f128_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_roundToInt.c @@ -1,172 +1,172 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_sqrt.c index f1d9bac79..a32fe33f3 100644 --- a/c_emulator/SoftFloat-3e/source/f128_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_sqrt.c @@ -1,201 +1,201 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_sub.c index 5181cc5ec..ef76ac4e7 100644 --- a/c_emulator/SoftFloat-3e/source/f128_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_sub.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_extF80.c index ec169c0ff..cb0a6ce68 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_extF80.c @@ -1,109 +1,109 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f16.c index 5a8ee7212..62ed35b7c 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f16.c @@ -1,95 +1,95 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f32.c index 07e4a80df..c10105f78 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f32.c @@ -1,95 +1,95 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f64.c index f791938b4..76da76cd7 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_f64.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32.c index 16c4a3ccd..cfff04aeb 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32.c @@ -1,85 +1,85 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f128_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32_r_minMag.c index 18cfeaee5..161b67569 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i32_r_minMag.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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_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 ); - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f128_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i64_r_minMag.c index e2cc62e27..dc44e7ae2 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_i64_r_minMag.c @@ -1,113 +1,113 @@ - -/*============================================================================ - -This 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" + +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 ); - -} - + +/*============================================================================ + +This 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 + 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/c_emulator/SoftFloat-3e/source/f128_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui32_r_minMag.c index 92facd517..650c18fd9 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui32_r_minMag.c @@ -1,89 +1,89 @@ - -/*============================================================================ - -This 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_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 ); - -} - + +/*============================================================================ + +This 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 + 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/c_emulator/SoftFloat-3e/source/f128_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f128_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui64_r_minMag.c index edeafd3c8..3f2fb6bce 100644 --- a/c_emulator/SoftFloat-3e/source/f128_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f128_to_ui64_r_minMag.c @@ -1,105 +1,105 @@ - -/*============================================================================ - -This 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 "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 - -} - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/f16_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_div.c index 77f9a2cd2..ad91a9076 100644 --- a/c_emulator/SoftFloat-3e/source/f16_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_div.c @@ -1,186 +1,186 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_eq.c index 692fa035f..4079f50f7 100644 --- a/c_emulator/SoftFloat-3e/source/f16_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_eq.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_eq_signaling.c index c1e7a509c..117d05d6e 100644 --- a/c_emulator/SoftFloat-3e/source/f16_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_eq_signaling.c @@ -1,61 +1,61 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_isSignalingNaN.c index 3eb3d4cc6..c49e0f2e1 100644 --- a/c_emulator/SoftFloat-3e/source/f16_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_isSignalingNaN.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_le.c index d7313debd..fa6943225 100644 --- a/c_emulator/SoftFloat-3e/source/f16_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_le.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_le_quiet.c index 15181c260..769a1dc9e 100644 --- a/c_emulator/SoftFloat-3e/source/f16_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_le_quiet.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_lt.c index 7745699a2..e796016b6 100644 --- a/c_emulator/SoftFloat-3e/source/f16_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_lt.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_lt_quiet.c index a31e4a13f..c55bade74 100644 --- a/c_emulator/SoftFloat-3e/source/f16_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_lt_quiet.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_mul.c index a47cab8ce..112111d8d 100644 --- a/c_emulator/SoftFloat-3e/source/f16_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_mul.c @@ -1,140 +1,140 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_mulAdd.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_mulAdd.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_mulAdd.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_mulAdd.c index e97571ac5..092937298 100644 --- a/c_emulator/SoftFloat-3e/source/f16_mulAdd.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_mulAdd.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_rem.c index 0ffa498a1..76a0de68a 100644 --- a/c_emulator/SoftFloat-3e/source/f16_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_rem.c @@ -1,171 +1,171 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_roundToInt.c index a567d51d9..d5ed190d5 100644 --- a/c_emulator/SoftFloat-3e/source/f16_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_roundToInt.c @@ -1,120 +1,120 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_sqrt.c index 47a3bbf14..40865fccc 100644 --- a/c_emulator/SoftFloat-3e/source/f16_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_sqrt.c @@ -1,136 +1,136 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_sub.c index 03a87cf32..e18f25cf1 100644 --- a/c_emulator/SoftFloat-3e/source/f16_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_sub.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80.c index 99c2dfc74..aaeed4d0a 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80M.c index 7f2d53458..75c5e6041 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_extF80M.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128.c index c4b81dc84..107479af9 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128M.c index b4fc873b5..a31dab6ce 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f128M.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f32.c index a219454bf..c58208a86 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f32.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f64.c index 7e87c25f4..dd85d33fc 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_f64.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32.c index 805c4e550..aeb2faca4 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32.c @@ -1,87 +1,87 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32_r_minMag.c index b1f996371..1aa72f569 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i32_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_i64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_i64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64.c index e3c0065f6..c0487cf31 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_i64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64.c @@ -1,87 +1,87 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64_r_minMag.c index a5a6a077e..25f91e210 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_i64_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_ui32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_ui32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui32.c index 5371ca339..19ab66e72 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_ui32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui32.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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( 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; - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f16_to_ui64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_ui64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64.c index e6cb000f1..4260b7a05 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_ui64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f16_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f16_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64_r_minMag.c index b4f975f83..098a59763 100644 --- a/c_emulator/SoftFloat-3e/source/f16_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f16_to_ui64_r_minMag.c @@ -1,87 +1,87 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_add.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_add.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_add.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_add.c index 70e03e7f9..f59ac0a8a 100644 --- a/c_emulator/SoftFloat-3e/source/f32_add.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_add.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_div.c index 05ec701f7..8d4447914 100644 --- a/c_emulator/SoftFloat-3e/source/f32_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_div.c @@ -1,180 +1,180 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_eq.c index 801bbfd73..316fe6a4d 100644 --- a/c_emulator/SoftFloat-3e/source/f32_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_eq.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_eq_signaling.c index 4c610ffae..03395f310 100644 --- a/c_emulator/SoftFloat-3e/source/f32_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_eq_signaling.c @@ -1,61 +1,61 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_isSignalingNaN.c index f5954cbbc..d98cc9b26 100644 --- a/c_emulator/SoftFloat-3e/source/f32_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_isSignalingNaN.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_le.c index d89d1e88d..83a30079d 100644 --- a/c_emulator/SoftFloat-3e/source/f32_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_le.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_le_quiet.c index c2d4297a2..329fe3937 100644 --- a/c_emulator/SoftFloat-3e/source/f32_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_le_quiet.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_lt.c index 5b5fd2282..ddc180499 100644 --- a/c_emulator/SoftFloat-3e/source/f32_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_lt.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_lt_quiet.c index 015388143..59c9cf12c 100644 --- a/c_emulator/SoftFloat-3e/source/f32_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_lt_quiet.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_mul.c index f5c856002..b1f8ec002 100644 --- a/c_emulator/SoftFloat-3e/source/f32_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_mul.c @@ -1,137 +1,137 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_mulAdd.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_mulAdd.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_mulAdd.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_mulAdd.c index 9a28e212c..b77777e4e 100644 --- a/c_emulator/SoftFloat-3e/source/f32_mulAdd.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_mulAdd.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_rem.c index b29bf416e..2d74c8cd9 100644 --- a/c_emulator/SoftFloat-3e/source/f32_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_rem.c @@ -1,168 +1,168 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_roundToInt.c index 305af79dd..801a76919 100644 --- a/c_emulator/SoftFloat-3e/source/f32_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_roundToInt.c @@ -1,120 +1,120 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_sqrt.c index 9263bde59..9c6a99846 100644 --- a/c_emulator/SoftFloat-3e/source/f32_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_sqrt.c @@ -1,121 +1,121 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_sub.c index 383484dae..edbcd2fb1 100644 --- a/c_emulator/SoftFloat-3e/source/f32_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_sub.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80.c index 742ed649c..8d3545701 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80M.c index af7e32a76..03580fd5f 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_extF80M.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128.c index 6a765a44e..ee0b414c1 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128M.c index ee7e6b367..cd3ad693f 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f128M.c @@ -1,115 +1,115 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f16.c index a9e77b775..a00b2e8de 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f16.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f64.c index 4f97519e8..6cd08eddb 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_f64.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32.c index 7d0356fbe..241ab8e8c 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32_r_minMag.c index 7652f2ebb..f8134f461 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i32_r_minMag.c @@ -1,89 +1,89 @@ - -/*============================================================================ - -This 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_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 - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f32_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i64_r_minMag.c index 397ddf6d0..346f6b83d 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_i64_r_minMag.c @@ -1,94 +1,94 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_ui32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_ui32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32.c index cb47d9458..32d9eaca1 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_ui32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32.c @@ -1,84 +1,84 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f32_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32_r_minMag.c index cdeb75f9f..a90ef926e 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui32_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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_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 - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f32_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f32_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui64_r_minMag.c index c0fe54f6e..69e00648f 100644 --- a/c_emulator/SoftFloat-3e/source/f32_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f32_to_ui64_r_minMag.c @@ -1,90 +1,90 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_add.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_add.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_add.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_add.c index 42f840dc5..878f6da75 100644 --- a/c_emulator/SoftFloat-3e/source/f64_add.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_add.c @@ -1,74 +1,74 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_div.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_div.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_div.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_div.c index 9c967bb74..7f5eddd4a 100644 --- a/c_emulator/SoftFloat-3e/source/f64_div.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_div.c @@ -1,172 +1,172 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_eq.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_eq.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_eq.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_eq.c index 360200379..e075c02f8 100644 --- a/c_emulator/SoftFloat-3e/source/f64_eq.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_eq.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_eq_signaling.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_eq_signaling.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_eq_signaling.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_eq_signaling.c index 5daa17937..d7e89a2ed 100644 --- a/c_emulator/SoftFloat-3e/source/f64_eq_signaling.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_eq_signaling.c @@ -1,61 +1,61 @@ - -/*============================================================================ - -This 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 )); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_isSignalingNaN.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_isSignalingNaN.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_isSignalingNaN.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_isSignalingNaN.c index e5d38321e..5e1411fc1 100644 --- a/c_emulator/SoftFloat-3e/source/f64_isSignalingNaN.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_isSignalingNaN.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_le.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_le.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_le.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_le.c index 0b43d0467..a96808f33 100644 --- a/c_emulator/SoftFloat-3e/source/f64_le.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_le.c @@ -1,67 +1,67 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_le_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_le_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_le_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_le_quiet.c index 832eee7a7..942afba75 100644 --- a/c_emulator/SoftFloat-3e/source/f64_le_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_le_quiet.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_lt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_lt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_lt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_lt.c index 49ee05be0..d9cf5aa7e 100644 --- a/c_emulator/SoftFloat-3e/source/f64_lt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_lt.c @@ -1,67 +1,67 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_lt_quiet.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_lt_quiet.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_lt_quiet.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_lt_quiet.c index d64088054..89d30bc00 100644 --- a/c_emulator/SoftFloat-3e/source/f64_lt_quiet.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_lt_quiet.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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)); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_mul.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_mul.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_mul.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_mul.c index 222e91dce..38bdc852a 100644 --- a/c_emulator/SoftFloat-3e/source/f64_mul.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_mul.c @@ -1,150 +1,150 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_mulAdd.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_mulAdd.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_mulAdd.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_mulAdd.c index fea3d968b..13fc38287 100644 --- a/c_emulator/SoftFloat-3e/source/f64_mulAdd.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_mulAdd.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_rem.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_rem.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_rem.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_rem.c index ffce679aa..ca5350c94 100644 --- a/c_emulator/SoftFloat-3e/source/f64_rem.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_rem.c @@ -1,189 +1,189 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_roundToInt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_roundToInt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_roundToInt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_roundToInt.c index 54e7b0542..c5f08ae16 100644 --- a/c_emulator/SoftFloat-3e/source/f64_roundToInt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_roundToInt.c @@ -1,120 +1,120 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_sqrt.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_sqrt.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_sqrt.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_sqrt.c index f9f226b69..f12acdb41 100644 --- a/c_emulator/SoftFloat-3e/source/f64_sqrt.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_sqrt.c @@ -1,133 +1,133 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_sub.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_sub.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_sub.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_sub.c index b5ccb882b..74158bec1 100644 --- a/c_emulator/SoftFloat-3e/source/f64_sub.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_sub.c @@ -1,74 +1,74 @@ - -/*============================================================================ - -This 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 - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80.c index 2799d9b07..553ebd0c5 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80M.c index a2e67e46f..d258bdc26 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_extF80M.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128.c index 60af3b0be..8f03f2ff0 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128M.c index fbc451537..e4a862c7f 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f128M.c @@ -1,117 +1,117 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f16.c index 121e3062a..0cc6cc534 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f16.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_f32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_f32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f32.c index a18106556..6074bb845 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_f32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_f32.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_i32.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_i32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32.c index 8d9785b0b..2cf260304 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_i32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32.c @@ -1,82 +1,82 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/f64_to_i32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_i32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32_r_minMag.c index 8b7a91f1c..8cccb8efd 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_i32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i32_r_minMag.c @@ -1,96 +1,96 @@ - -/*============================================================================ - -This 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_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; - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f64_to_i64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_i64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i64_r_minMag.c index 56c6a1010..4fcc52c56 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_i64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_i64_r_minMag.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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" + +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 ); - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f64_to_ui32_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui32_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_ui32_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui32_r_minMag.c index 6e3d14e8f..01758dc54 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_ui32_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui32_r_minMag.c @@ -1,88 +1,88 @@ - -/*============================================================================ - -This 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_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; - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/f64_to_ui64_r_minMag.c b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui64_r_minMag.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/f64_to_ui64_r_minMag.c rename to dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui64_r_minMag.c index 87eb0d05c..e1d81a018 100644 --- a/c_emulator/SoftFloat-3e/source/f64_to_ui64_r_minMag.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/f64_to_ui64_r_minMag.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i32_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i32_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80.c index 8036fa9f1..fd91cf059 100644 --- a/c_emulator/SoftFloat-3e/source/i32_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i32_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i32_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80M.c index 6d5431c1c..d12e3a8ef 100644 --- a/c_emulator/SoftFloat-3e/source/i32_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_extF80M.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i32_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i32_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f128.c index a7d55cba4..75575bddc 100644 --- a/c_emulator/SoftFloat-3e/source/i32_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f128.c @@ -1,64 +1,64 @@ - -/*============================================================================ - -This 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" + +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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/i32_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i32_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f16.c index d3117248a..14ac58860 100644 --- a/c_emulator/SoftFloat-3e/source/i32_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f16.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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" + +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 ); - -} - + +/*============================================================================ + +This 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" + +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/c_emulator/SoftFloat-3e/source/i32_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i32_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f64.c index 24feda542..64662bb22 100644 --- a/c_emulator/SoftFloat-3e/source/i32_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i32_to_f64.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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" + +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; - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/i64_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i64_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i64_to_extF80M.c index 4838dde6d..0bf67ff46 100644 --- a/c_emulator/SoftFloat-3e/source/i64_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_extF80M.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i64_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i64_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128.c index fcb017939..a2b6dea88 100644 --- a/c_emulator/SoftFloat-3e/source/i64_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i64_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i64_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128M.c index 0a04eb8d0..7b44ec7bd 100644 --- a/c_emulator/SoftFloat-3e/source/i64_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f128M.c @@ -1,92 +1,92 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/i64_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/i64_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f16.c index cef7b6133..f16eccf04 100644 --- a/c_emulator/SoftFloat-3e/source/i64_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/i64_to_f16.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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" + +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" + +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 ); - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/include/internals.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/internals.h similarity index 97% rename from c_emulator/SoftFloat-3e/source/include/internals.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/internals.h index 020b3402f..f8eac0530 100644 --- a/c_emulator/SoftFloat-3e/source/include/internals.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/internals.h @@ -1,278 +1,278 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/include/opts-GCC.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/opts-GCC.h similarity index 97% rename from c_emulator/SoftFloat-3e/source/include/opts-GCC.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/opts-GCC.h index 18c1523e9..192cb58ca 100644 --- a/c_emulator/SoftFloat-3e/source/include/opts-GCC.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/opts-GCC.h @@ -1,114 +1,114 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/include/primitiveTypes.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/primitiveTypes.h similarity index 97% rename from c_emulator/SoftFloat-3e/source/include/primitiveTypes.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/primitiveTypes.h index a4a6dd11c..e30540068 100644 --- a/c_emulator/SoftFloat-3e/source/include/primitiveTypes.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/primitiveTypes.h @@ -1,85 +1,85 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/include/primitives.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/primitives.h similarity index 97% rename from c_emulator/SoftFloat-3e/source/include/primitives.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/primitives.h index 863ab45b5..10847817a 100644 --- a/c_emulator/SoftFloat-3e/source/include/primitives.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/primitives.h @@ -1,1160 +1,1160 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/include/softfloat.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat.h similarity index 97% rename from c_emulator/SoftFloat-3e/source/include/softfloat.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat.h index b33374cd6..9ed17c1b9 100644 --- a/c_emulator/SoftFloat-3e/source/include/softfloat.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat.h @@ -1,372 +1,372 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/include/softfloat_types.h b/dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat_types.h similarity index 98% rename from c_emulator/SoftFloat-3e/source/include/softfloat_types.h rename to dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat_types.h index bc30e3144..b92d24625 100644 --- a/c_emulator/SoftFloat-3e/source/include/softfloat_types.h +++ b/dependencies/softfloat/berkeley-softfloat-3/source/include/softfloat_types.h @@ -1,81 +1,81 @@ - -/*============================================================================ - -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 - + +/*============================================================================ + +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/c_emulator/SoftFloat-3e/source/s_add128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_add128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_add128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_add128.c index 5a9d5082a..984664360 100644 --- a/c_emulator/SoftFloat-3e/source/s_add128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_add128.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_add256M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_add256M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_add256M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_add256M.c index 4fb46a174..bfecf7b2e 100644 --- a/c_emulator/SoftFloat-3e/source/s_add256M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_add256M.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addCarryM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addCarryM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addCarryM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addCarryM.c index f0ccf6724..fb84a383c 100644 --- a/c_emulator/SoftFloat-3e/source/s_addCarryM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addCarryM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addComplCarryM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addComplCarryM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addComplCarryM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addComplCarryM.c index e1584c669..1f8d543e2 100644 --- a/c_emulator/SoftFloat-3e/source/s_addComplCarryM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addComplCarryM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addExtF80M.c index febfb6577..f0142905f 100644 --- a/c_emulator/SoftFloat-3e/source/s_addExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addExtF80M.c @@ -1,186 +1,186 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addF128M.c index 8ed9d271f..c5fcf7047 100644 --- a/c_emulator/SoftFloat-3e/source/s_addF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addF128M.c @@ -1,211 +1,211 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addM.c index c935baaf7..e1cc66bf0 100644 --- a/c_emulator/SoftFloat-3e/source/s_addM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addMagsExtF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsExtF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addMagsExtF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsExtF80.c index b1bb5dbe6..6e7d1a6ff 100644 --- a/c_emulator/SoftFloat-3e/source/s_addMagsExtF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsExtF80.c @@ -1,156 +1,156 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addMagsF128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addMagsF128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF128.c index 8e5ce5b34..da8e88824 100644 --- a/c_emulator/SoftFloat-3e/source/s_addMagsF128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF128.c @@ -1,154 +1,154 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addMagsF16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addMagsF16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF16.c index b7fba0928..abc42b8ae 100644 --- a/c_emulator/SoftFloat-3e/source/s_addMagsF16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF16.c @@ -1,183 +1,183 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addMagsF32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addMagsF32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF32.c index b74489dec..ed85bb00b 100644 --- a/c_emulator/SoftFloat-3e/source/s_addMagsF32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF32.c @@ -1,126 +1,126 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_addMagsF64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_addMagsF64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF64.c index e8a489874..25b8f386e 100644 --- a/c_emulator/SoftFloat-3e/source/s_addMagsF64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_addMagsF64.c @@ -1,128 +1,128 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_approxRecip32_1.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip32_1.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_approxRecip32_1.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip32_1.c index 4a326a438..f4fdbfe5b 100644 --- a/c_emulator/SoftFloat-3e/source/s_approxRecip32_1.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip32_1.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_approxRecipSqrt32_1.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt32_1.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_approxRecipSqrt32_1.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt32_1.c index b3fdeba68..28eca6495 100644 --- a/c_emulator/SoftFloat-3e/source/s_approxRecipSqrt32_1.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt32_1.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt_1Ks.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt_1Ks.c index 38a27985c..7a8663b51 100644 --- a/c_emulator/SoftFloat-3e/source/s_approxRecipSqrt_1Ks.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecipSqrt_1Ks.c @@ -1,49 +1,49 @@ - -/*============================================================================ - -This 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 -}; - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_approxRecip_1Ks.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip_1Ks.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_approxRecip_1Ks.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip_1Ks.c index f1fca74e7..54b1b0fab 100644 --- a/c_emulator/SoftFloat-3e/source/s_approxRecip_1Ks.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_approxRecip_1Ks.c @@ -1,49 +1,49 @@ - -/*============================================================================ - -This 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 -}; - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_compare128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_compare128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_compare128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_compare128M.c index dc97ce9e5..8f1218209 100644 --- a/c_emulator/SoftFloat-3e/source/s_compare128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_compare128M.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_compare96M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_compare96M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_compare96M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_compare96M.c index 2681c4627..8fdf71861 100644 --- a/c_emulator/SoftFloat-3e/source/s_compare96M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_compare96M.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_compareNonnormExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_compareNonnormExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_compareNonnormExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_compareNonnormExtF80M.c index 267315304..6712e5764 100644 --- a/c_emulator/SoftFloat-3e/source/s_compareNonnormExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_compareNonnormExtF80M.c @@ -1,111 +1,111 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_countLeadingZeros16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_countLeadingZeros16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros16.c index 7a68da52f..af2831cc9 100644 --- a/c_emulator/SoftFloat-3e/source/s_countLeadingZeros16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros16.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_countLeadingZeros32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_countLeadingZeros32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros32.c index 53ab22824..a7c50cd45 100644 --- a/c_emulator/SoftFloat-3e/source/s_countLeadingZeros32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros32.c @@ -1,64 +1,64 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_countLeadingZeros64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_countLeadingZeros64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros64.c index 13a222463..34745b12e 100644 --- a/c_emulator/SoftFloat-3e/source/s_countLeadingZeros64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros64.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_countLeadingZeros8.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros8.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_countLeadingZeros8.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros8.c index a56f5a40c..0cc60a110 100644 --- a/c_emulator/SoftFloat-3e/source/s_countLeadingZeros8.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_countLeadingZeros8.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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 -}; - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_eq128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_eq128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_eq128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_eq128.c index 275b8ae29..1ccc24354 100644 --- a/c_emulator/SoftFloat-3e/source/s_eq128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_eq128.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_invalidExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_invalidExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_invalidExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_invalidExtF80M.c index 237d21721..d33047867 100644 --- a/c_emulator/SoftFloat-3e/source/s_invalidExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_invalidExtF80M.c @@ -1,49 +1,49 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_invalidF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_invalidF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_invalidF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_invalidF128M.c index a20840e5f..ee63cc3b7 100644 --- a/c_emulator/SoftFloat-3e/source/s_invalidF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_invalidF128M.c @@ -1,53 +1,53 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_isNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_isNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_isNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_isNaNF128M.c index 6008cf3eb..c73e49b44 100644 --- a/c_emulator/SoftFloat-3e/source/s_isNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_isNaNF128M.c @@ -1,57 +1,57 @@ - -/*============================================================================ - -This 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); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_le128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_le128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_le128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_le128.c index 1fce7af98..da3d62427 100644 --- a/c_emulator/SoftFloat-3e/source/s_le128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_le128.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_lt128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_lt128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_lt128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_lt128.c index d7ce3b997..b78199174 100644 --- a/c_emulator/SoftFloat-3e/source/s_lt128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_lt128.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul128By32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128By32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul128By32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul128By32.c index 7c0fdc867..df32ee730 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul128By32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128By32.c @@ -1,58 +1,58 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul128MTo256M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128MTo256M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul128MTo256M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul128MTo256M.c index ea8865ea3..68d272ea1 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul128MTo256M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128MTo256M.c @@ -1,100 +1,100 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul128To256M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128To256M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul128To256M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul128To256M.c index 7c9d9b584..91df8f223 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul128To256M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul128To256M.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul64ByShifted32To128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64ByShifted32To128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul64ByShifted32To128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul64ByShifted32To128.c index 57e528888..ea8d486a1 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul64ByShifted32To128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64ByShifted32To128.c @@ -1,56 +1,56 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul64To128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul64To128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128.c index 5d360aa4b..0a3c2b992 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul64To128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128.c @@ -1,66 +1,66 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mul64To128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mul64To128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128M.c index ed10be324..cd1528978 100644 --- a/c_emulator/SoftFloat-3e/source/s_mul64To128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mul64To128M.c @@ -1,68 +1,68 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mulAddF128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mulAddF128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128.c index f6b2b45df..9b98b9f64 100644 --- a/c_emulator/SoftFloat-3e/source/s_mulAddF128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128.c @@ -1,350 +1,350 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mulAddF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mulAddF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128M.c index f51fc71d2..3ed3bae41 100644 --- a/c_emulator/SoftFloat-3e/source/s_mulAddF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF128M.c @@ -1,382 +1,382 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_mulAddF16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_mulAddF16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF16.c index 3a684ac32..cca4db42b 100644 --- a/c_emulator/SoftFloat-3e/source/s_mulAddF16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_mulAddF16.c @@ -1,226 +1,226 @@ - -/*============================================================================ - -This 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" + +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" + +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 - + +/*============================================================================ + +This 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 + +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/c_emulator/SoftFloat-3e/source/s_negXM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_negXM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_negXM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_negXM.c index ec8c92886..bb1c5a1f4 100644 --- a/c_emulator/SoftFloat-3e/source/s_negXM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_negXM.c @@ -1,63 +1,63 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_normExtF80SigM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normExtF80SigM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normExtF80SigM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normExtF80SigM.c index acc54dc63..fabe91ca3 100644 --- a/c_emulator/SoftFloat-3e/source/s_normExtF80SigM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normExtF80SigM.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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 "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 ); - -} - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_normRoundPackMToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackMToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normRoundPackMToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackMToF128M.c index 309455998..b15d160e9 100644 --- a/c_emulator/SoftFloat-3e/source/s_normRoundPackMToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackMToF128M.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_normRoundPackToExtF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToExtF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normRoundPackToExtF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToExtF80.c index 76e791d91..2518bf44a 100644 --- a/c_emulator/SoftFloat-3e/source/s_normRoundPackToExtF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToExtF80.c @@ -1,71 +1,71 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_normRoundPackToF128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normRoundPackToF128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF128.c index 67f5b4349..14cf28ead 100644 --- a/c_emulator/SoftFloat-3e/source/s_normRoundPackToF128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF128.c @@ -1,81 +1,81 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_normRoundPackToF16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normRoundPackToF16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF16.c index 1d184d58b..008c5f124 100644 --- a/c_emulator/SoftFloat-3e/source/s_normRoundPackToF16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normRoundPackToF16.c @@ -1,58 +1,58 @@ - -/*============================================================================ - -This 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" + +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" + +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 +#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_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" + +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; - -} - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_normSubnormalF16Sig.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_normSubnormalF16Sig.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_normSubnormalF16Sig.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_normSubnormalF16Sig.c index bb92adfea..94541c914 100644 --- a/c_emulator/SoftFloat-3e/source/s_normSubnormalF16Sig.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_normSubnormalF16Sig.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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 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_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 "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 "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; - -} - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_roundMToUI64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundMToUI64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundMToUI64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundMToUI64.c index 196f53735..c91147453 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundMToUI64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundMToUI64.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackMToExtF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToExtF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackMToExtF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToExtF80M.c index 08620159f..e9d3c3b10 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackMToExtF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToExtF80M.c @@ -1,256 +1,256 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackMToF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackMToF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToF128M.c index 22591b835..fad5d08df 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackMToF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackMToF128M.c @@ -1,178 +1,178 @@ - -/*============================================================================ - -This 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 ); - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackToExtF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToExtF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackToExtF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToExtF80.c index 0cc7af985..a5ea38c60 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackToExtF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToExtF80.c @@ -1,256 +1,256 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackToF128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackToF128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF128.c index 41584316a..6688c524b 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackToF128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF128.c @@ -1,171 +1,171 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackToF16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackToF16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF16.c index 2dde55bb4..8d03d3b2c 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackToF16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF16.c @@ -1,113 +1,113 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackToF32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackToF32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF32.c index a69b8d4d7..f1eb0c2ab 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackToF32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF32.c @@ -1,113 +1,113 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundPackToF64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundPackToF64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF64.c index f7f3abff5..98c1639a4 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundPackToF64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundPackToF64.c @@ -1,117 +1,117 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundToI32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundToI32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI32.c index a3e727dc7..1999dcf56 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundToI32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI32.c @@ -1,98 +1,98 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundToI64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundToI64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI64.c index 773c82cfc..d1e9d2799 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundToI64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToI64.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundToUI32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundToUI32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI32.c index 059e231e2..eaad69e70 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundToUI32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI32.c @@ -1,93 +1,93 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_roundToUI64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_roundToUI64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI64.c index 856ad9792..0ba78a640 100644 --- a/c_emulator/SoftFloat-3e/source/s_roundToUI64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_roundToUI64.c @@ -1,97 +1,97 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftLeftM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftLeftM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftLeftM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftLeftM.c index 71a309919..feafc67bf 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftLeftM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftLeftM.c @@ -1,91 +1,91 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftNormSigF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftNormSigF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftNormSigF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftNormSigF128M.c index fa4976c8e..4820f3908 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftNormSigF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftNormSigF128M.c @@ -1,78 +1,78 @@ - -/*============================================================================ - -This 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 "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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_shiftRightJam128Extra.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam128Extra.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJam128Extra.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam128Extra.c index 75722887b..efdfc5432 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJam128Extra.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam128Extra.c @@ -1,77 +1,77 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightJam256M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam256M.c similarity index 96% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJam256M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam256M.c index 433870a81..36601f87b 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJam256M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam256M.c @@ -1,126 +1,126 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightJam32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJam32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam32.c index 2533fcd95..be4622abe 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJam32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam32.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightJam64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJam64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64.c index 4b40e3de6..733c1736c 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJam64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64.c @@ -1,51 +1,51 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightJam64Extra.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64Extra.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJam64Extra.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64Extra.c index b93fad39c..2c5609b1c 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJam64Extra.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJam64Extra.c @@ -1,62 +1,62 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightJamM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJamM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightJamM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJamM.c index edf5f956b..0a0dd7d75 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightJamM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightJamM.c @@ -1,101 +1,101 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shiftRightM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shiftRightM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightM.c index 00265ea23..6ac383f0f 100644 --- a/c_emulator/SoftFloat-3e/source/s_shiftRightM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shiftRightM.c @@ -1,91 +1,91 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shortShiftLeft128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeft128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftLeft128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeft128.c index 7513bc627..9e0b8beee 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftLeft128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeft128.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_shortShiftLeftM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeftM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftLeftM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeftM.c index 48e6e03b5..b947c63ce 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftLeftM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftLeftM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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_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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_shortShiftRightExtendM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightExtendM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightExtendM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightExtendM.c index bc441c731..92c786af8 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightExtendM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightExtendM.c @@ -1,73 +1,73 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128.c index 76008722b..8a75a71ac 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128Extra.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128Extra.c index b0774401d..b5d4e1c31 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam128Extra.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam128Extra.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam64.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightJam64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam64.c index d3044c853..1a7724f98 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightJam64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJam64.c @@ -1,50 +1,50 @@ - -/*============================================================================ - -This 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" + +#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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/s_shortShiftRightJamM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJamM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightJamM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJamM.c index b567e482a..60f698b9f 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightJamM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightJamM.c @@ -1,72 +1,72 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_shortShiftRightM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_shortShiftRightM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightM.c index 54e0071c7..8a165fe45 100644 --- a/c_emulator/SoftFloat-3e/source/s_shortShiftRightM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_shortShiftRightM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_sub128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_sub128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_sub128.c index 9bf346391..4691aec19 100644 --- a/c_emulator/SoftFloat-3e/source/s_sub128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub128.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_sub1XM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub1XM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_sub1XM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_sub1XM.c index 30c5d36ee..6c79a8b2e 100644 --- a/c_emulator/SoftFloat-3e/source/s_sub1XM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub1XM.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_sub256M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub256M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_sub256M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_sub256M.c index a4af5a1c9..a1f9f899c 100644 --- a/c_emulator/SoftFloat-3e/source/s_sub256M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_sub256M.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_subM.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_subM.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_subM.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_subM.c index fcccc744c..213b0bf6d 100644 --- a/c_emulator/SoftFloat-3e/source/s_subM.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_subM.c @@ -1,70 +1,70 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_subMagsExtF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsExtF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_subMagsExtF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsExtF80.c index 0c46c61a2..86ffd9b89 100644 --- a/c_emulator/SoftFloat-3e/source/s_subMagsExtF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsExtF80.c @@ -1,158 +1,158 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_subMagsF128.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_subMagsF128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF128.c index e93543f09..595ed7e89 100644 --- a/c_emulator/SoftFloat-3e/source/s_subMagsF128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF128.c @@ -1,139 +1,139 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_subMagsF16.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_subMagsF16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF16.c index ae1417ea9..6bbcb5c88 100644 --- a/c_emulator/SoftFloat-3e/source/s_subMagsF16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF16.c @@ -1,187 +1,187 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/s_subMagsF32.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF32.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_subMagsF32.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF32.c index 0c1f32ed6..8b3aee0d6 100644 --- a/c_emulator/SoftFloat-3e/source/s_subMagsF32.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_subMagsF32.c @@ -1,143 +1,143 @@ - -/*============================================================================ - -This 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" + +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 +#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; - -} - + +/*============================================================================ + +This 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" + +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/c_emulator/SoftFloat-3e/source/s_tryPropagateNaNF128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/s_tryPropagateNaNF128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/s_tryPropagateNaNF128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/s_tryPropagateNaNF128M.c index bab04a7c0..57199d963 100644 --- a/c_emulator/SoftFloat-3e/source/s_tryPropagateNaNF128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/s_tryPropagateNaNF128M.c @@ -1,55 +1,55 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/softfloat_state.c b/dependencies/softfloat/berkeley-softfloat-3/source/softfloat_state.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/softfloat_state.c rename to dependencies/softfloat/berkeley-softfloat-3/source/softfloat_state.c index 0f296654f..277d76f95 100644 --- a/c_emulator/SoftFloat-3e/source/softfloat_state.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/softfloat_state.c @@ -1,52 +1,52 @@ - -/*============================================================================ - -This 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; - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui32_to_extF80.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui32_to_extF80.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80.c index 34f79368f..dbb35c747 100644 --- a/c_emulator/SoftFloat-3e/source/ui32_to_extF80.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui32_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui32_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80M.c index 0a0c098c0..ec2396e61 100644 --- a/c_emulator/SoftFloat-3e/source/ui32_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_extF80M.c @@ -1,74 +1,74 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui32_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui32_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f128.c index c3ab53daf..8dcf2eb4d 100644 --- a/c_emulator/SoftFloat-3e/source/ui32_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f128.c @@ -1,60 +1,60 @@ - -/*============================================================================ - -This 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" + +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 - + +/*============================================================================ + +This 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_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/c_emulator/SoftFloat-3e/source/ui32_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui32_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f16.c index 6fc377bca..a923f2234 100644 --- a/c_emulator/SoftFloat-3e/source/ui32_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f16.c @@ -1,65 +1,65 @@ - -/*============================================================================ - -This 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" + +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 ); - } - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/ui32_to_f64.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f64.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui32_to_f64.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f64.c index 504f96e6e..11050c100 100644 --- a/c_emulator/SoftFloat-3e/source/ui32_to_f64.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui32_to_f64.c @@ -1,59 +1,59 @@ - -/*============================================================================ - -This 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" + +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; - -} - + +/*============================================================================ + +This 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 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/c_emulator/SoftFloat-3e/source/ui64_to_extF80M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_extF80M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui64_to_extF80M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_extF80M.c index e676d904a..96628843a 100644 --- a/c_emulator/SoftFloat-3e/source/ui64_to_extF80M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_extF80M.c @@ -1,74 +1,74 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui64_to_f128.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui64_to_f128.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128.c index 6ff6a6fcf..c2c1ce3ec 100644 --- a/c_emulator/SoftFloat-3e/source/ui64_to_f128.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128.c @@ -1,68 +1,68 @@ - -/*============================================================================ - -This 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; - -} - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui64_to_f128M.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128M.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui64_to_f128M.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128M.c index 043406cc4..2475304ba 100644 --- a/c_emulator/SoftFloat-3e/source/ui64_to_f128M.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f128M.c @@ -1,86 +1,86 @@ - -/*============================================================================ - -This 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 - + +/*============================================================================ + +This 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/c_emulator/SoftFloat-3e/source/ui64_to_f16.c b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f16.c similarity index 97% rename from c_emulator/SoftFloat-3e/source/ui64_to_f16.c rename to dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f16.c index 3d58e85cf..9ff6e1739 100644 --- a/c_emulator/SoftFloat-3e/source/ui64_to_f16.c +++ b/dependencies/softfloat/berkeley-softfloat-3/source/ui64_to_f16.c @@ -1,64 +1,64 @@ - -/*============================================================================ - -This 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" + +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" + +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 ); - } - -} - + +/*============================================================================ + +This 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 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/emulator/CMakeLists.txt b/emulator/CMakeLists.txt new file mode 100644 index 000000000..73ab3f64c --- /dev/null +++ b/emulator/CMakeLists.txt @@ -0,0 +1,41 @@ +foreach (arch IN LISTS ENABLED_ARCHITECTURES) + + add_executable(emulator_${arch} + "${CMAKE_BINARY_DIR}/riscv_model_${arch}.c" + "riscv_config.h" + "riscv_platform.c" + "riscv_platform.h" + "riscv_platform_impl.c" + "riscv_platform_impl.h" + "riscv_prelude.c" + "riscv_prelude.h" + "riscv_sail.h" + "riscv_sim.c" + "riscv_softfloat.c" + "riscv_softfloat.h" + ) + + add_dependencies(emulator_${arch} generated_model_${arch}) + + target_link_libraries(emulator_${arch} + PRIVATE softfloat sail_runtime gmp z + ) + + target_include_directories(emulator_${arch} + # So the generated C can find riscv_platform/prelude.h" + PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}" + ) + + # TODO: Enable warnings when we use the #include trick + # to include the generated Sail code. Currently it + # generates too many warnings to turn these on globally. + + # target_compile_options(emulator_${arch} PRIVATE + # -Wall -Wextra + # # Too annoying at the moment. + # -Wno-unused-parameter + # ) + + install(TARGETS emulator_${arch}) + +endforeach() diff --git a/c_emulator/config.json b/emulator/config.json similarity index 100% rename from c_emulator/config.json rename to emulator/config.json diff --git a/c_emulator/reset_vec.S b/emulator/reset_vec.S similarity index 100% rename from c_emulator/reset_vec.S rename to emulator/reset_vec.S diff --git a/c_emulator/reset_vec.bin b/emulator/reset_vec.bin similarity index 100% rename from c_emulator/reset_vec.bin rename to emulator/reset_vec.bin diff --git a/c_emulator/riscv_config.h b/emulator/riscv_config.h similarity index 100% rename from c_emulator/riscv_config.h rename to emulator/riscv_config.h diff --git a/c_emulator/riscv_platform.c b/emulator/riscv_platform.c similarity index 100% rename from c_emulator/riscv_platform.c rename to emulator/riscv_platform.c diff --git a/c_emulator/riscv_platform.h b/emulator/riscv_platform.h similarity index 100% rename from c_emulator/riscv_platform.h rename to emulator/riscv_platform.h diff --git a/c_emulator/riscv_platform_impl.c b/emulator/riscv_platform_impl.c similarity index 100% rename from c_emulator/riscv_platform_impl.c rename to emulator/riscv_platform_impl.c diff --git a/c_emulator/riscv_platform_impl.h b/emulator/riscv_platform_impl.h similarity index 100% rename from c_emulator/riscv_platform_impl.h rename to emulator/riscv_platform_impl.h diff --git a/c_emulator/riscv_prelude.c b/emulator/riscv_prelude.c similarity index 100% rename from c_emulator/riscv_prelude.c rename to emulator/riscv_prelude.c diff --git a/c_emulator/riscv_prelude.h b/emulator/riscv_prelude.h similarity index 100% rename from c_emulator/riscv_prelude.h rename to emulator/riscv_prelude.h diff --git a/c_emulator/riscv_sail.h b/emulator/riscv_sail.h similarity index 100% rename from c_emulator/riscv_sail.h rename to emulator/riscv_sail.h diff --git a/c_emulator/riscv_sim.c b/emulator/riscv_sim.c similarity index 100% rename from c_emulator/riscv_sim.c rename to emulator/riscv_sim.c diff --git a/emulator/riscv_sim_RV64 b/emulator/riscv_sim_RV64 new file mode 100755 index 0000000000000000000000000000000000000000..b4246b52436bf10707b85e62dbb88d619e944149 GIT binary patch literal 19956896 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
?{z~Ibu-|Me>pKto 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

)6GLGh^trVZ4spv}T=l?%C&=d`;Gd5UM7! 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


vvjdHY$A)mrS}aKITo$DEfw+-n^Uew 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�XqZMNdQ+w0V|UMRnA+MqaL;baG3&*0PG?G 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

N7u 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�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 s^G3 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�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

`9Vg%v2 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�=At~ESWQF(A5IUkXXHB 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%0D^ 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

>K@{$u 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

^zR0WXYhS`W^As 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

ADwf;075AcFSuQ*TxANs|7i|SWCbZJ<> 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 z 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%0A=A`LuAD4!E70#kpTw~gj+64?!IwPd_ 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�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

+#53^52?hJIgF>-Ad$Ey5O|CjN?czA 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 ~Ps z3KkP7fv0Tk${fKnCbxj+Y~VNG1@Rns$ztz;S45Jzf}*wUIZXi+t8LF|TA+AsdrrfF z5=1OelEs?M6Ojfxt92FbbGXOaf-G*eqZsu^70|)>Z=#m}~}qWdj8k z2!10<01sKL0`NOg6UbY~p3_D^zB=}twg$eeW6x<9AV1L;D8ORFfUk&gz-YF1WT9XT zle55BHgF9XN8AC%v)J#z1mY!dgRT7y++-5GNbnOINCo^%qyuiTSkuLV+eAB{SzUWh zy93SZ+H*PpXi?Xm(~&?+Vj|Fr#byGniABH`wzdk`%48F;jSUo9D%ehx26nJmWnd@q zx121{uh?20BsuHZ9c>Eas%Lk!9gw@8-O=tq9%2BHm&HZ``G|?Y7`7JnonS1JC}12L z_yQPD$KzHCKF#tGPpX&h-+rYy0NS=v6 zF=8gLj93JG*TDXKRsqW!*bQs~RuH>^l`QttD#0q^0q};cJq6w}c?-N_10R9+gk!bf zFBY?azln@M-i8(~EcV0zRf(*?7UIG^!PbU$uWta`8rr?S2W%%E13OskHL#QT5BRg8 zy>vq4ax49sNDaIp!hp<;?CwMXUl6=Ns9xa2mKkTmde!*e&1^@f+Z7Y)|Jo;Aw2P*6lYzRAalf{y;P_ z0*GO;2|y-d2GEVIEd;tVSqb!D0~>*!#4ey0iyZ=b6T!a=4zsmXz!4_tfTL_65;#W0 z1IJk`5ja5<0Ma$F=d=WnzKK1j6@Uy)>^ZFogb`0330y4p2FOT!0NSv%q`M^8Oq8POcrM`Y+J*x%G%@coe- zXlgI`5x_xW0&s}M-aHc=CO!Zk*jn=Ef{#S!R04N1dls$((L|>t^395EX7_FQP&v*@ zVB$mrS)1A8DDot6*&ijMfp3T`!02Xnuk!$7n%TWB42&hp0OMG!fV{v(k0<^qgfl>F ztpt*jL_h<|2aA;e5{U{xPNF7|i**_SxtTZ% z$jl9FVb5Iok8&U|gxFtDij8QI7H7*nCxC^-Mc_2?!{>r`#7!js5aB&#<%@4=H*gL8dfxK{C_}sfMiH-T$*|idqQF(zNNjCs_bp_-EVms*lIc=sH<5Of91QJkX^-1| zKx+qE+RH6@A;F=R_HuIqhnWodS?2T^8yMI^ntn;#8z#MeO^i7wOXnTY(RxEbAgrGI?5ZJ=jUI1H} z`~_@d14&B?wi79V9V`|K>?9%p)yAIFI3T2rJ*PQ<iY z2OhDt{lFh>?4yqpz+>VfkfE);KyCtIMDlV17vTgl5-z|H(Lgwn1&AQ>0Fgvtz)h3^ zJVX^Bil_@rY-@LP^4Ee%#B5+Pu>|;*SOZKUwg6L!J-{^LC@`Hk2h1RT1j5_d6a58< zAlgh6M7Fb+PFJ9OyL7mx(9;j-LktJ{wzF5H@j$0r<49H11Fr9f%od!P)l6(~#W1*Q?lfaz?l+YTA$+uFh2l`;)v1Gb}sz0KNC zNwyffiIw?fE3>zQy;t*YqtrRTT~+t|_mVe5SxKL9qkYJ2VgIgBfvi5EU=%r1{@&n z00)V(a*v??tW#>-gzagJTN;NERgwJM$?ictpjc-c#c?CUk}jdRjKb3n$sVFR@Q4@y z{L#hk=t$sk7rTLpz!PF7@RY@#&k{T%-U9`@+S5rgTTrO0-C7Eua96vvv_KIe94N|S zu|P2*J1~*0eF;orQVf{P1{UEtTHg|@fGI4t37AUk2JW!6!@w_0&H#7Wz*XQLaT~bL zVh@1_#0wy2H+xR?JVCB*_MD~xa(A=m)Bt&iOh8^1%Le2l=4O<&w`;fPm$j}1W>Oy*L$mkYL@!`G8yE~sU@{t*NW7^j z--SuUWh9e*$vwfhY~TYhg-MOtQfDd=eP5DkL>6E=kq4N;1_}c+nUn!$5mkWML|tGG zk>yvxTsDvgn8&0rFrO#`EFh`?3yHeGBBB|vm}n0yA$kB-4}0Ys2&Cy@ua;%xExI}_ zQ3VKPvARGyCe48KOxgn(h#o+guW7(Vi~=&Ufk}WNW&zlWznX)9I3`7Kvwp6gc2X9|O;iQ)5cPn(L~|e?(E<39 z=m{(!1_29u+6(?0U=fqaz~Y|vr;z2TU(}}=8ObP)1GARN4M^peluvoKK zf{#qv13|s*UiSc!^yc>mNNOkU;jM6WWN2^4oGrc+`008F-kY7?mR$Zf3iV7MyOBvi zI57)|AQl6W#A?7zYz92U)dKPp6-C?zqKStQAix!Or~ zo{2laSr%)RM0V)z^|M=R5By4W0e&ZX0*{G)z%ybn@RAq-ye7r~?}&-O-^5hlKjKY) z850TWZ};FIAecxpKoCMC2Q={+kcvnPq$XTI8o~{vBVvItA`4)M5d#I0#8@DTm<(hh zW&rWTJm3pr36PCg2_zEhfZW6uARn;{C_ucx!vG2qZ-Jsjx5DyaJs)5%o&La!0rt8x z0(ePG0A8`!4B$^Xw($!1e6Zb} ze}L3PvZ4Yf@flzd>47wa8%Rqe0A+{TP3Hv44Yiw|Urf-2$#S48ll8#tp`YW~NS@{+ z<-2{2*n#9G>l^@nVx5z~&%`C*7K{A^+$J6XcZjFJFRT+^LU5Nz1n#j|0pLDS0w^}j zo`niPaiS(rf@lPkBw7Qdh%P{BqAyT}NQNh6P90`1s?UIFOwt3>2{$l<#S(y-L{4B9 zi+u&mCQ1Txh>E~mq82cZm{?jcpV*#OzRnBS^kO6nnXCq~54StI8OTBW03;5#m(CF& zCzG>4E+*H2+)VBOd6-NrE67XC1o9D!fG>$vKz?EqaDdni93&0{hln%4Vd5%qgt!eH z_0{=WaEyIB1046&0Z#bp04Iruz$xMdaGLlFI71{YFE~r21kMqmz3! zc>`Qx@&UL^B%dm{LO6k|gbTPvL<2t(S%B+A9^eMCZkpgGu^sq{*bn?noB(bS7lGTv z{e`mb+#zlv`Nfw2cZny!J>m^;pBOqr@PHT#{7Os(e&Yg}2Rvl*9q>D`4tPXt2mT=T z1CNOlz!SE15qQcZYL?&`@dfal$PK(;okGA%CZ&O8BkeCnW#GG!_IIHUu$*WLtRUI} zD~ayFD&n`tS7oQ1hS zdnU_(4oubp9hqzcIuZMT&ctz`3sG;8pexZF=tgt^x)VKt9>gGE`8W25^$oCsm<+7^ z#$ML5fmOs3U^TG@Si?HE77M;7egoFB*mGbVllQ=SBFPfL1|kKpkw^<{BEo^qL@cm{ z$PR2J>ii+tMl=Ps6YYQ2V5eK1DA;l zz!l;KaFw_RTq7O>KN7Ej>%{Ztf*Ztp;QO)mfOe7>g0*AqrIP|!N2CRkjkA+*;7elu z3ps~+Vw^p4=v*T^nx~0a6gxl8Uhvt03#{`c@DEW8_?O84Qt%&99QZ(#2Xc?Mdr$+Y zMKlC@60Lw<aQVm&a3*a6%o4gh!9 z+DYISCYOM_#81FI7JC5PC!YQ(c)((BfxHv!+5QMLCmgQ@EhgA=Y5^^YdX?ocY4HU6 z$v@N#Y9Ijf6?djg2Z+YNL85&_SrrZu zJ%Pi-VBiQb1~^Jg1&$H(f#bvq-~{n-lzi7u5_^%HB8~&6iNkm-#Tnu(aF+NHIA+zYbR54jg)haYk;$ZkL6 zUXZ;uJm=)WSo#2Q88}Q_2aXZ9fRn^M;0*B)I8QtQE)g$*tHfL2I`I$i6S1(C;5M-g zxJ#@89uVt*hs0*!4`K)Kl-L8jAPxe5632kI#A)C!;`iEue~G8SN8&C%tl*jUxA8HM zY^MDMd;=)rBM`!3y0IWRkrr?e5rAf$JWT{Ch$28r7Aps&BB}$`X4?~O2y~chcc(Sb zajuQB>i~R!p$K(&-1MwOtHqV~u2cS6NXeJmk&+b7Q zU?`JtU>FexjGk{7O9aNuw_6+8TrifH1e|8E*}xelOM$b*S|IfTyS43rbAjF30l*?o z0XY_Zj;Hx~MtvbC{W=j>kaSyQ*SQUJUu3t|rlp_<(G8G2W8C%b836PmMghHv$v_|0 znFI7CmI3`(Y#q>_*a7@V90abjPVd%&8^loHCX0;&ej=s=r5D?MTL_dPRsk1@&A_F_ z_RQ@8E;Bg>Tp=z1SBWNV1=omn!0$`!>GS{|5rcqSOTAYfxW|5p#}W)*>L`EOx6vH2 zG;s4aa;f)Wj*cMDXw)0A%u7r z2gWnm08H>T08Atf1Cvxdb^de&J4Y#>$x z8(D13cEKiMDzKTD4{Twb6~IGjLICc|5cS`aD z>x={T5YvIZEVdBXN2~(&6Ptkp#2%o?3j2$33@A!m0E(@!zdtvD;)HXzpahF$1WFQ_ zfKo(upfu~`2g(p7fU+!B5hzF02EHbm0_9mpVUWK9(QuC>6JXYR3`cZRaj>v zP?eYjRAaH(Ky_j%P=izD!Re^d$eV{(;v;-Ouoq>id z))#0*3VS}HH)nR+7O$8wkyK$ zOhb3fxTNy*=ea8!r!M$@f9I|6{^If>gY#FU#{&-?L7qLR_rof0J&*H{V9zRhHOmNu zueOm1h#;~9k*n=>El#D72n z>m)xS$V^zk7c6FgEJQ4jmB;~PW1Rv(cA_@!J=3FKm(!9Z?e43LM# zrUH41`9MBm1@I;7Yy|QXvr-BQu-FpdE8=^gAh8W7#5((d!o*3S2#Z|?iW0YgV#GtB zIP1IwN)Z315|m`Ikk16A2q#dQ$Ox2SolHPkB0Ery#qtAR6D5H1L`9$i>(mA+`WpCL zP|4Q-P}$c2P{r2(P}SD}P>pB`RA;gFKn;^ir*b$%;aSrHATnDYl<0w*yBu!yNZ z8e%?>cD>z$6+kGl5lBbu2GSEpfDFVrAdIbD2V6v(W`c}FH^2}BfN)|I5J5}^BH8pD zz)dUzJj6O6ir4`}69<8O8|(#gt-0V!;uj!4@dr?Vcny3-d;kg(juwJKL>izl5e^jD zU@x~gpeT_D6eBvf6s#rs0_)hoa9}-?3BX%oCh(5M76b2@yvQK~*2Op4qocXz3Q7?{ zf64i@GQ{JxGHzOf$QUBUni8WiSlfxXEYAlr5&MAg#0g-+MtkwD zX(gEGs{>5()d42^>Hy!e&Lv<9@iQ=$#eM^(5ifx0EcQ1rgGsX1f|*45HiB71O<*?b zGzR7nZGpKg)*YBf3nz1ff|d|#fu$_A9au&j0KQ|f zQ^0a2SAZ47ZD1wwJFtp%UID9#e}OeD*1NsndtxZCmc_;a>zGUj))NbX4a6#7BkODi zHW7P(%`A2d*g{+YwzAm44uWk=P6OMCtH2K84zQDT9s#?EKY`sW_8;&Ak-Vc|4~tpA zUM2?E$0Thh!G0nFI6%Y$2Z@}(AvRDDI82lVj<8r2;3!cKI7YMpjuV}LkgfJtCi^x) z@~!q4BR}9EN&uS0Dgr5p+CWO8DUgb24}3=S1U@GQ1F6~c7{E!4-!8CNYzB~qSOlac zRs*4|vjs>;>;=-Z*l{2OaS;e3ega&?uRum3#ZG}CLV<8L9SKAb2|y%^(6^i5);r7F)erkc-#?fcKoJ&e02C!!0mWFX3s9U%KcECL0w~F16M<61ETA-tP2DRf z!(={CmRJFlW3i3E*Tin1JaGi5z&huEio|uG5{umfDicqDDlArVzo06UM|f{^HKGZU z>MYg{s6q4qYO>fMpcXM2sLf(ifI3X(0dOfDTA<&D(S_8eA zbOrh_=@0Z}G7{)VOal6|*lb_`ll!S7{FpsDK%qJQF3y3zr!rk_w>IN)gG5}aii~^Rh*koWS zlR3aLVj1uqF*%K3IqS>;R``kmE19eVRuMaZ)hu=pSVNo!z9+5%Ygy+Gu#R{HtY@*0 zX$2by9V*yJqy;vyP6V)-Nj$KH$O&v^v4X%hCZ&PxL=|8Mi`4^m`jAeri^W<1yNOP~ z4@4he59?39X`-w%s0oGX!9AvTuI7B>7FE~uR0gkZFN8l(Eok4JnNDCY% zA^^``d##EGs_(T|mz+Qiq98DuC=HAuBEtlGhy-9Skqg*IBrPo8?fpb4B-!@a)2R$( zC+Y$@h~~ie`|R<=j=yFIemiUhDpn_z1irbVk9Sb{+T9S;>Qfb+-MECBOOx zGPCdZUKzoG%pA6ogl0J`r{NQAB@ObVMJrVf+Eb1Is@ibZXrtwwE{zX5e)Bik1uDVY^NrJkc-95xW<|fIdg;WIXUI zF$4IG7*|Xdde5WwBQht}l#$6{N7Le!s-D((RK;Fm+$*W`7x7VzYqROv;VAaIZ)NR#B5=*> za>6?XpDM_+0`)qawC8Csn(s*L@lN=pJ%h)9&UWIi(pt+aKi{2nEb=%1{$ybDf1UKc zX;YeSR#^_sJDkc^L7q(SxqwExoU&WI33NSWFS6OK1+$5zz#L*NFqha4%p(o}^NCZy zOB?RR+3>QYBBvciANgj#=xM%x%KMP^Vz$D9JXcWf=;^e0KeFdGaO||b3_Hi+eGeB- zJ4X5&xp+G8N$;0Vd*7-oXD)t6z1TDMth@r^&e$zpZX<|iatlZx9s-%q*vsN2@CES? zkcCif1zA}qHIR*P0rNSX7+?XDY`{VysGVRDkpfsugaS*5NMI?E04!qtcvotcaVx-gjnbY(IR=tfkzE^B3X7F&*_2a^rJ zAz~MBn8gkQN0_X|<9&}Z*$y0IasW6^oB~d;*cIR;liR>4CcguxiC4fG;$Pq_5z?aI8Vd_70%fUBqvajCeD77Ssr zv%pX$KLW#uyTEW8?vpQr- z=e*lWkNqav$LG9nT*(yVd5r0$y=c$Z8zA(ey6qv)g7i$%0vVV@0AWOYSAmPg zasnBd6a)cfM#JU6e-B{i6NIhbq7f7OMx$WNR&eSxh;-ZY=s`RHdS0@Z&NHAF@gC^SVoBv-NcUmV z;h>-|(F^ED3<3HRV}Sw0G+-dH0Ql*Wy?Iy({Cvs&Y1;(cVzD29+r&}e4$N_+WSj^tJ+_e`0_f>c+?BMVlRgoKssU(ke*l#WFWQx zVZ>g*MH~k*63LGW3}FG`gaIOmSRj(f0l0|*fQKjv)W2#ku1dhttM>j=9bnm2`$KL9 ze0SBJpBl#m%b7F+RxoJ;tYp#+SY^Y#baoQiQtiF!$o|5&?Dky^+%?^QH63=_WJ@&w z_3mD?Cp-$ccg>#gWZ*uNIlz?bcCrkZdfl$G4wyy^z%W_G8x~&q;yJZTj>TKwv~fV* z_^yZkWFz?rsWb0qyEO}#PZ(eU5eqCNasZ2dwkKKuSj?m(@Zy%8R03WSb%0kyGvLo# z_CyPx6uc(N0&iHX8t|4$1EA1tyG|>hFwq4lLi7WQ5+i_O#6+MtF$*X`q&zJsNu&dI z5^i7@kr~)c`m2J2?_r&|^wm)?|_#a(&9p6OuwE;Y# zG!>{pp+NBpg%(X(WN~+QcZ$0ecXx`rySux)EbfcDJG|$)H}eeJcYpiGe(v|2b7drH zGMSKf#(BE+<)4r7ZCcJhC)>4rEonCH$G7gUymt3_Z*;u+`p*;m+G{n8oZtaxWWvX< z^;V_>p1juE9}YZqW+H)S&P)N|xieD=c;U=c0bV*Y^?+B-ObbB1x1nyq>~Hm?g8+vUV}M@HvJydp z-p))VppO%EfJ3@0O}Z!eDaYpT+&h0T_G*iFe;$r#E$88AsU>eln_-mUAM`TX10y~- z7YK}WW(EPHoS8AeXlG_BFvgjg4~%tY76c2%IWwz(@y^T^V1hHV518o8oB$>{GnatL z&dhBf)|q(%OmSx30aJA*&CXN!O{aw)-P_3zNa-IbTlDeIpRQW`(fH{qlzJ@vn6`*i zrkPgSLw4Ze&+eN<`uC=meExF>F4c1Gz-3yp1Ak!lqhIw7oE;)K_Eqn|rND7#W<7Ai znb`@PbY>0%r<|Fyz-edZ8gRy$c>tVsW?lm4oSDzSd1t0qsNjM#GX%Kk%!~srIWyCN z%g)T0Eb`R0vb9q4xo_}`GLkx zlmwbM`&0&+Ix}^FBR}+JHwTV7(E&K-L=14;iDDTAC!DANoOGfV;P|OWYXU_6)cd+E z5arBt2YNU$0O;w&C?Lj(SfG~^bAjGY^v)#cOSqzMFX4V3uo!AbHapE9Q z?U&w(r-ABDTmfo0VIM50=|n!DmJ=m_+D=pg>NrscsOv;Cpq>-$fmFZsq&N2D6bz!R+LDus3-F>_a{T`;xE0e&koM zKN)|RZ~*BI4kVL-gUIyYV4>c?2yh6qQQ#}GAo!Xr4Zbn@1~>JNZ%OMBXti40{l8l* zA?la?QVJ8{rxPt9>XJ?>vA>sGWs+a_d+<$mX;lo8SE70!)(7*Ej^V=mWPY#!SrRNr zRt5_R^|sUn3p3jsEJAhwi;^*5F>)|ioE!_55bBX6-5z^`Oq@EbWC{7y~;e~`1lpJd^&!e3-r@Hbf< zw73|X-w?DK3?7r$Dv!PkV)u!^j7Q%^p?b7AAAOe$%cHN6R0XxdAn%Mpg1Uh3$-dwR zaya;roCtm*XMvx|pWqkL4ZnW-mGlF@k%8cMG6eiVW(9wexxrs#5%4!z4z$EK_EHVd zO75s9j7J^`}Ek_{!lf*DAcCc-e%3(QCcfSJg2U^p2LMv#$USDSIj z3V_{&`kAT}*qvFgX2KrK27o=ubYKh_4)$W-NU%3q0PI7S0{fCxzyW?O&* zNdFeXfn;iM5E%vzCUby8$h_cCvN$+QsOPN+4rjJDID%{njwIWGqsXo;g`>%S;23fQ zIF_6Qjw5G-Y;LjQ<*ISP9w{K)5#j( z46+e8lWYyn66%q=g0q?J2hJf!fd1~rS+}Q+Fo{t2Jq9La_5v6{-UO48kHF;Q8!!d= z4QwvdBgbzmY(aX1(JW2|wj}$u6Sg9UgRR+jBG`u6Szudcmw@fabzpmP2iSpq4}l%Y zGhiq3D%hE9zgF0V>hIj9(fOR5$a8FEg=`^;*(LEB4i4g!72%%C5c6HLUug}}sQ z8PK1s1}0(O24GUMB^bcsd-w;{labHCZdU78aM6N0)$2XXLZzCH*J^@3?cVO-W#)&8|!MtP& zFdsR3r!YS`1uQ_$0}GNXzw_{HAY?qRu<}!w}4NX-3LBn_5@hW&*$NkSXZcvSAzAJ-3-=eb}yJPu`$$f(2ETGCG-~Rp+Z0(X0w96%;pC7Fk1xN%WOF? zo4+wp4KTY!2!%>auwcW z)&bsPHa~cq*^=NLW-Ehv0*!g=f`1A1yv@OW%yt0#GaCaQVs)dT$g1y-A0woTff3u8XWMv&}(2W;=k1$an6-#N-dqpR{=hlL+;^ zzF<;jQ-A?vFqn+Y0wyPOfhowsU?5o*Oi4cW6s98If~m>xU>edjfiNxU1EwRBgXzg2 zFo?_y1`G8D<^)5SEd+)#TO2>Emx0-eU>I2&%t$r`GqLYeFF8ix%yvdLg6sokCWnDp z$O&LpaweFKELcI9U8pyqG?;^|3fjr~po5GCBZd0(?gU1Wy}_L1P%sz!zE~<-l$)G| zY#tVWsVMx5*?5(NdC7!eJ{Bhh^D~=@gwL>$Oy1083i^Y3xdtb(qId+Di}@H2V0WSU@Ni{*qZDO zwjnpx61F9GgYC$pV0-dB*nzwOb|fEyoygZ`Hop-N>?agx$&NU=Ok( z*pqAp#*kgWUSwaeH#r>aLrw(ylC!{mXx6!IyuQ_1(>H1a1nophTmoI(15Gs!@378wH0CbNQb$cA%-bIDfV zJhBTopX>`RAcuns$%)`1au&FlTmmj3*MUpP9pEzZ2Y&c{Icb|GTtWJRE6Eh#Dl!;c zO=bbtkh#FMWMOa}Sr%MRRtGnb+vW>5k_W&|2JWb94&ydT&v*ZTwoKU|ia9t`qPx^otSezWZ$ZQaJ ziOdXMW^qpNZ)OXDSI9EpRTftRuQA&IyiRssCcMGo0pLw$M}fD6Ki|k5G3*|qzKC|zuy06qd@=2qSl^f* zk`q2|IIShvGnuRWV_nxJ;*JNTp5TTtfb*l?n}(ee+%oK(;5NKTu8t(r6WlQzW(mIg z7&me@50MG5OY{US!0A4`lOtNJwn*NJ9>pH$CIS5-`8?R2bXg(nL3)8b$pA2hOb7N7 z>QgHm>`g|3eOO!o?8|H^upe0k>`&GM2axGj3I_`Hn!~|C%tnHP$pYXIvJ^O!eXD@O zn5_p6XSM}6g6s&6Bzu9QNH6@v{b-@y`~Ywav+2OGWH>mE#gX86W($B5m@NfPB&&dv z$a>&p_H6;iGCTIMa0;{2z^UW{a2ktOfzz4Y0?uG|A2^dd0nQ>XfwS57HaLgbC*WLW zt2`CXBkO_l$rj)O_U#BRWVRQ$h#UegCdYwG$m!rxp*|=J!DY;@2A7jz&xI>koC93R zY+i5`SsYwVRs`3OwZXMyQ*a&G4qQ+605^~W!Hwkk7s5^C4RAC05Zpq(2Dg%5!EL0= zOW}6X3*12lfIG=_;4Y!_;SBC3hrJT+At!))$(i6jp?-ue2KSR|!2>Mb4jv>Af`?dq z8a&MG74Qgo4?N1^Yp;dJn0){qXZ9s{g8U4gWbtzhb&6S!H^S3oV(<)^3Oq|*z|J`* z)cYzcvgesC`Br#=tPEZx>w=fa=HO+r1Nb)?170BqgICG1;5Bj@c%5AJPI!Y%`d)aG zObgy3Gl92B2Y83f58fq9g7?VE;C-?#_<(E<{zG;EACkF02p^F}z{g}c@CjK1d`dO~ zpOLM>=VVv#1=$aLNsa(tk(0pJWIX&b{TnhN_?Aoxz9Z9u@5xNy2hst4B=dux$dce^ zvNHIEtP6f6ujChgBkzIV$>-n?@+0_@{0;shJ@CW#zsba)CDeHQrUI>G1~49(9dsdg z7Zk=PkAkk`dC*4Q0Nu!kpgZ{*^dP^2o}^15VFJ<%Oh^WRUS#vaLT|DI=tIVUzT{xg zj~ojoBBz0g$pxT4xe81|ZUK{$`@jIQU{PT*vNV{StO}+e>w|%0G?}( zU>b5fn3kLYrX&4|3)7QhHyIA* zAtS-R$O2$qvJ{w)tODjI>wyKx&839}$-Q79@;F$Sya*N{Z-GV0$6zt?Em)lV4wfKY z%Lq%7K42-*t*o##=?9h}1HrOn2w0BH3YI5xgB8dkU`4VVSc$9wRwf&PRmkq+g;mJ` zU^Q|SSe=XoYmjrnn&fh@7P%3uE!3|Hc7t`uqhMVYp9kwPn|z|MJ{bfyU~y)!A+tHb zMr0wdF^kK9O_;3)HYFQ?%~;$LY|iYuNcq<#T98q>gwZTcFj$!CXd22d6+<2$jMyNjccfJ*FYuMKkR2akc&u;9^vfu!+Iyg|MUvV}B z2Qk|U9L((TSm6-zA~=-11->UAgCEGZ;76f8sNca)%(_kyekOguFJyA?D;WfSBS%dY zKCNkNLM-@Uo!gFPPm3z9e^puULE(e9i26@C|tbd`mtA-;oj1h3|!W-YD<` zvjxGAWNGjdi>rd4nXM0gA)~>sWGC<&*&F;$4h4UZi)RRb3iYbig1?yE4*n(&f|gpw zjy(-p$tz$y@*e0yJ_qBIA3<00H)tcD&J?(aGs)WvxJ_cADBR>w!PS)3d6VYUe9OZJ*A^dpCWiO6waVsbj@FVxFe2qs~6HJFs#3I>q-!DQq~ zFgbY{OhMk7BMc-TgDJ_kU@G!En3{B*D@;TBfN6z#&B?)Z%m#t!$;@C7nG*~qm;WOS zAvc1d`$(9ToC{_nmxGP!8t2tU zurawCY$DV<=P1~e+4EpC@&?$P#Sg(2%)SPr$rVq8Ey+z_D{>FmTBzqe2DV}L0@#+k z3ASVLBd|TQZ@>=ZH?Sia|EaJOdH$KOGkF8-LOuk$3iYa9gWZ_@3U()5o(p@BUSLl$ z0E{8ifxXCZus6B}zl^`4t?(Vwab~ zq0F9nB^*Xx1&5RO!4c#OaHLSr`w1MytmUH zZe`Z>qi`GPl}}!PZf9`-xP#er;7&3e+{NNZa5u9Bz&&Isa4(Cifcu!O2ks|ZfCtC{ z_!XUl>^llP#B3~hn4Ak9A(w+k$&KJK^85h#Hw2H92ar8Mo&ryje}kvU@PfkAWF&Zo zEC8M*OM&OeD&Tpt9(aLl0bV3Kf|tl%;AL_M_%}JRknjpQ3%p7$0k4tk!0Y4=@CKQ3 zsO+4ZP;96Hf44i*o<5NHfQlF5WhpH-^2c0S{O~< z1zVEOz*gi3u(eRn`wMKtta}+@TQU*Yj>Rd#_RNNY9ms4Teh^Ww>M_`fd<%9azk^*! z*RsN{LcJ;5IECB-P9^t& z(}a4>CqVpYre4*V)WR9$Rd6PGADl(L0B4h*z&WHPjc_jM3C<(^!TDrrZ~++xE)?oT zHcl&C#B3XIF|*ykCCv5*my#pFW#nXVIXMShK`sMVk{iGeEsUMB3;akvNhkb7z5_p# zKfo_Sy$QDT!mrHwg5Q`;0e)vT82mwI0e`YM7x;_W!r*T*CP-+BHr6~Cw31`Nc;qzD zMW`3K0F2M#;hNBoD2j{kRjknGAnqB%njm)VD&Rn5%7#quc{n)mf1mVgy+aH z;CXT?c!8V`UL;q7m&ncFWpXe0H+dYyFVgB&T?DU^x4>)U*S5mzq)R*D4bls|Db!mO z0N!FY9eA4z2k)@h=bpSYy~}J~WbxCudR4{2`(#D%0okg(@E@`Z_)w^q(HDHg>~Qcg zIT3t9&H|s3OTcI3IuO6nt4H1ezF_tc_>!#KQTU2%4!$NkfN#hc@GUtQd?(ZsjRoH` zI}Q9mE&xB0tH4j>7VtCKzq9ZQITHLzP6oe`bHMN9GVlkv0sKks0)LT5z~AIK(9+sC zpw~ew`MHZQ9%=0=bRiRf@yR5hE13qgkr}}*?Tm@+U{^99*o`a!b{FdXTnX&K?5=LY zp3EKrW0*Y$_9Cx?y;=MZ*oWCyU|;eJ*pH0YUD%&Y2o4~Vf&+zmk@I>82Qj+>987Kk zhmd=~q2w`e71J`1*G z_8QoZd;qp5f1MU~Al=UhI|}u@iNH?GrUW~apmn!6uAl-37`1-NiU3e}Gp=+eP73 z(igl&rU0*#!Qc%t3wV>v1>O?s?JW%6X0|MNhpcx=c$dX3zOIynTK!M@|bnao~FDV)XZZE!ZT zPry0kJ8&+Ge}MCtwWSiyCw;*MEKUI~WHuOFL}mdOlM7P|myoN$rQ}wy$_Qh}?gy)q zC&6muWw1JV2dp8~yZtFxliBxRE%GN=n=GAHScj|%)+OtM^~h+jKG_LuK=uY3l0(5p zLcOZ-U}I)yfKA9nU{f+Ay|5XX6>LuC23rXA$VI?tX3K#s$r@lQvJu#tYz}Lc$2&nB)mmF1#gq@!8<~|s-NIpX5E5?_eekRJ{br;AVa`^$gJQ)p&mIm_=wqq zA;QPxY48bo1$;{01D}!4!RJCf@<;Fmv%kTYq(`Xm6`2@(O{N0hkj*j(-;(XYcVthn z#~5R`4+49VW55`pUe#2v7dap7&El0{A7(d$eVN@0_A?mV@UXl5(=-#r?kOr8cce`e zhUM^|kupSu*)+a;224q&SA(2)XlQS|2n~;mZrsNv18MzH?P96YTknfJ_K8luff*jSFjB^p{1}b zITLJ0E(Y6^YrziWcCaIP5bQ*r20N2iz%JxHu&Yr0szT6nu$#f)A~|gqcaLQg<&b+- zH4gc5@Q<&{tq}W6OKq{lw*=2yh7Q|Mk)Iv5$LX*`>_5X*b;vtP{uLvSQ>f_24yWUE zIAhqVzfySij{yqHZ3qcHo}=O%2Y4a$shE~$hF$e{5?_neirg*18|LGu z%c`V|XK}YyGq$;^Fr@tu4p>d>{EA@k_rK%IotoXzAqPA35GENR{~EOOPR*WT=f4ge zw7Qk-0dOv;9FoW=DdFn4JtJW_Awf&+O5*!X(U| z2ggk@cFqlOyih;cJp?B(`x>0c>{oCS>C#R(nZ;gUEVBXN6fzw+mBn4#3#T#L51dYp z0B5jx5;&8b4bCE$g0so>;2d%%IF~#O&Lhu)^U0+J}_xd`2^faz5{o$Z>bV;P z1KB;y+PVn$GF!Z>a38Z3!TrqE1`jaX6g5 zAd`bPSsVo3Vm32)o6HH`VR0ewF0*C8dt^26KG^_#z`iZPf5;h|gb!J~2z*4Y0Uxt? z8~B7g06ry8fzR0YZ}2&@cfl9rGw>ygKY*{u`dfsrSsV?%Av=L@$=={Q_8khoXLdaJ zf!P`0M`jm+pU5@fXBKY*zmQSegkM=)5d6k$Y4AH)75u^C`ruDyqrqQfC-66mdxMr) z#(6aqw36e&ctZU$;Nf1A? z3}EpBFd4ZDOwQshU{#+ArZb@&S0BeP4nXnEec1B(1-Nm&gR*WrM-#pTw6pD4&<%U+2Y>-WeU6L*lQA0$ zZe?~Z=&{Ph;_VhAf8m#dp5Su%q2Zv7U;?4uxx2xHBv{E!t~@9Fo=w269$tB!4NVj7)quEGmx3UFwy~LB=dur$dX{V z(0@W_Iox~Qgc0O%Ff(}(%tGD*vyzX&Y~))oJNX^VLAtsN?W7OrAd`cULkPE$qRms(0HF7Iho!k%BAWwod$;)6Z@(x&=dVFR0!-M^veL20lP9=4eUlX0K21jkNnneP)o1}*a&?)gFV4>SaTmRMwnGq0keiBJWBH#YwBuk8d9bNe{FahJe@l4!y{;DT?6yEee#=Ea9S(i^(`NB< zSH;coYOok?ml|>atN#8i^;F>Swe54hqnzcC7N*fu)CS%HOK+03im_UCdKN1 zmau~pxu>XKqA^*>9P{kdFzJ*InK z`}fG<4=c!S_+b5ru-Yi>0lgc-tKM?6xWBRbwfg_LutYUv%p-ct%qaL{wbd5M3#CIk zS1L}fY$CaWdQ|6{{W}-xcFtz;&Z_ogFQn9N4_!4Np2a(h+AR|hEv@$9g_2f_cZ7;A zHES>QliJK`1l+RetSx)g&El>1H*P<4j++NjFEs*grE^B>{+2bksVHs>b4F`tlc-Ha zlgK?>&gkuxGJ=nahMQ53OcD)FfMpgkqkA^Xdi_;x4MxMNV^1B{d!sYLf9%D3I3M=w z^I=?^+z9!-F!vF<-#X;f`LIP!F6Rley0NRpeWWfp6{qv>YBFgXJ@6Cc%u^+F_6k{M za<$A~Na;hc^{7OXsi=P&BN~x4i<|;IthVe3ndh8(2t}M7=wWelkDsIzlF>M)a>(i| zp@ZK?kCMk* zBK>&VhA4^t=HxpWn5&AOe*TyR(k2( zkf)G5b!Al1Kr{Mss6^ANXm&H2Wwo3Isa3Ru8TH*}v3RFb(RyYy&xiOH?^G(b}S$wLgSwfM=uGjxlpA?1Wk~gP5RaL(D zf8~eWceD6ZQTgWomCrrU-QrV8<#A)7Ild+Im7hgE>`^J)-u7oI*+}VCL8Z3FNiAG1 z3ofrx7viLHpjSDSdKo7*=eeZHs+4>Cf6vwbx@i1rHl~$?zaZ;WBlKoOj zrE0}V?Lx1TD%B-UYW%MF7M~I-H7-tSU2@qQ#Z_uWoRsaL^eU!OhvTF+ua&(~RHg35 zN%cUlA}aMgPU_Y-+2lehm9)dZ_eQ?2k}9ZD+2f?{=5@9B6i}(MaZ>e)NGhL7wTP2i zlUoMNt5O5wq;f|}>Mxa=9Vay>lkAP$Dzz<6DqdFEy}4BCVw}|P(>9AwCY5>>Cl&ob zdSz5854msc&y(%MUD;7NRVp}6YWh#vy-_MvAWka737IQQrE14X-MA}rWl$;Hi}>eU zw=&3fIaF$VoYaB{>7}0pSH?+I$sxNpMD;onC$&F|EF)N@?!`&Hx+A@EsML=*smEVs zyRxfPK&OANFgA&^*YXc{T^EMk-UCNp#J=y zTNT52D#gW%* zUj0ILy{9@LbCx5CodJ_tLPjvI!E64dV8qoCPpLn zJdw9rGpx272>pA3YH#UxhoO~E%Zo()sCtV^{nD`nqWZm!TMuIcBJR(To&LjWOM}ov zxf{qiMlyK^?m1j7AP-XJJCV?=d1%v+$=9R^Xapq7YfW*==z*m z`j6~>`Q7zNNOChQp*`Elh3)lf&Tao5SUm*P%h^!3ce1cms_54LDhgkiPnNjU_KOp6 z`OdSdw!EeDTwqHhR}=IK;uaK^)5mkRt>FJE2t6@Vj$0CSwpK@xJ|A{FyM+tCm{aFQAZI>NM9dGBe(kKbmH!@89df-hQV);? zZ?oEt{kuY+4~68W2lun;e0YGo*)KHVCmH#iO8xqGDszi27WXqMldRXjI%RGnnbRth zvqkO zWMivs$$uonH@B9@(lXlt%Olq*~AuKJ3=Hx&GF zFnnLg!RVzAM$+DrGZzznOJ4E1KeOgQIL?^ids4`rK5Q$+9IjSb!ZXLp&%{--)j?P- zEOc&R8RU@XLP>W-RBvZw0Xbpw$X`8#)NYFNyb#_@{#^k%&Wnu+Ea53W%9OLMTM@zL zTf%1)l?|J1J!3?i52Mq+Wy*QBhYagE+sfxS?)|N{pT>~-*)6==e2LGt`t&izjcEEo z&Xwj?TLy&8gBxC}yTrFya~okxcpV)n!$@fPMzW@X>YQngDBjkq|5?JOZI{1L3H5Op zh@5#GA{I`RoIDN2B90wmiD)xS9`?1Yw$(;RuQy_wTqJd`Z?zp}TyNi;CwhphM%)rH z&l!5oP?)8bW~}pi^UaJbB9Vc>+eC%kUv6MqX#>gR$Ug(R#7epdz6zN zw(Q+&$k!~!ZkA?_+j3RGqu&N;t{P~y*zKZ1wI-{4Ww0}qoEWMc3%xnqz_bdEd(UL?OrqSC8*hU=f4ztdYIY4;jE6&j(pbqWMKW zaZ<0QLSyAArrArmiwdFicnucW>VbT2_e!KMfnGlS(3tc74{GuQ;d@(5NigFO%|f?!oMI0nI72-Y%#3lPkV zV0|;V6~XifHZg;z5DY*t+6>-9Fd>3%&EO{lKTefkCo`B}hy1*5yA0ha0G(O5R5g0a}b=3;0!ak5y6QF&NYL_ z5X>`0f{V=HEd;Y7xZDiBLogV@HD)mBPzkC}Y&S?S5k9fCCr8a@vnCH})Q7y=C72W+ z^4h&ov&*chj~ey4@IDD9!RNwu7t|ayYX+i5eUy9@HTWpm{v}pwPM9@IP@_J5K7$&3 z`fPuRn)7DO3Dl?$tS?J2IX>OC-$%_=v*s0Q)Mwl`S#t$7cg&hZ^6q!@~BB;*5pS`!LkwzHiK0V{CQHIs56?uXaqB$GK(4P zgJ4Po?PhQyf_@0*GJ{JIv>}+!4DLekdl?B9HiPF8e1l*KGx!L>hX|H6gPtQKsP4O{ zC_#O^uA`=kS(64ei;l~-)HH(*1iP1(%6euHUof?+n>rdvP#@VgsA+1}v_(xL1Y4TH zfe2Pdu$>v4ieMQ8JDb5(2o^-JhZ#JFpt`rDw*(X8-V%ExYWkTq564JN{nzqWZjb~+ z-;R_TbvxNmVKUrKW>>e9jUd(SWTQ!SJJ~o=-A*=UOe4q`IAKDXDHJTS2PZ$ySr?EmfCp$x`+sV$8>UOeAq`IB#3aM@^rG$C;LUJ+sUkQ zH9((c>UOgDq`IBVja0Xjd6MdOGA~lyPUcIh+sP7>>UJ{RB%>!%x059&)$L>{Np(9} z8dBX(mY!6%lZBA#cCs*1-A)!xs@uu3km`1_?4-J#%t5N#$#RnFcCtLAx}7W^sct7L zNUGb(ijbM`7%wkWFHjx!nQi4ss-)N(Z>Amg#c(Nc3ibHzGC^3{pj1TV87of;S3k>> zLKO)oErKV7G#GS_&^hQ@3^GmZ9CSN8UF?ew6zm7V83r+E1q`~Sq>Qr67{wCR6v34U zt~Y}{5uAtM4l_6w!B_+jn!$w#jzsX38Qg|oKLjtE!P5wKLGZR2ypLc@1RtBh&j{8> z@QoQvI8K695d3Ne(;=9kgaqTQ<6q+_1T6?AFoR_f{8(Iq{${Wtg3l04Wd^$zg{kEq?aD*AemzwQK5S(ZRha%{S;7l_( z6T#m_CAi28u0!wxf~(EoVFX7Mk>D0HcpbsM2<|n5zYtuGd*KgCFcEH?w|7R(5woVs z1gQ!ADi4ek64VcjXw-Z(Y8>{{IP+hNoezvF@EfsyVB7=W8pH!*83xUcLBB~@4_Xg{ zhRC~7=cDa8dZiIN2mRPioK~y{{SBrwh(UK_(8?Gk+!)0YbpgQ=2xc>bj}gp^V5AxR zq1J?89y91CS03%52o^Adp$Hb1OSc|H&EQ`M=0vcR8LWt41cK$wU^4{MAy~x>#vqs! z!J1}p9D)fDtY-!nA!tFcu^GfS(Cr@!Nw9?(#J9@r&k$^51|J}J2f>bJ@C$-p3ret? z8T6VY!B+_OGK1+6e1KqoGnf;>s|XG;gJlssjo?T#*a*P`2#zy@-4NW0;AAs63c*zf zPB(+|5S)+T95c8X!6^tXG=nD)+*v?^%go>%1lJ+B+6;a`a4~`#%%I0)3C=)ps~Jp< z;5Y<#nL#^(gAv?s21_E?6Tu^9upWZ#5IkuHJ0aKv!E$2A?5V55ebV@Hc{$5qx6?{pHG$y##_E8Fbk5 zBJhm?OZHB=Wqo~cxhZ=RKe<%xf@YSKXzpI=ya<(Nid=-sy-<20F9xm_eJoZadU8SDSh#KWuz1*jddQT`18k2OMTKK zfSzKc>>xhUwSNF}7+HtCTQ?alr`QwesNGX#@yAe8SYm32N6kX)He#hE=IcBN#k}MM zE02I0_agEYnV08(^s0!WdKd{s@^Y{_0_}`I)Mpg^M%UI7^HxJgC6pat|GYqgoj9Ju z?ukG*25^+uu95wgLPECehZEwO>k916Q)s#_mnP=SJxBItxBK!CK`2QV*};)n&&nd6 zO0hMvVSp4rSItf1Wf#6y%|!TK$6GY*0i)$}9uMiNcV8Z?KZ!8=orbc?;qzoshon$t zqmE$ZS!YQsfs{B;l4l4$mhbO*_(;%OycADlQbIxOeTO{^=`gWBR*Fa-ROB!!Bodhq%WEhR*GO;d%kHX~ z9L?0SQrE~}G`Ff|^(3-~x1(tyj+_gOtQDFbUEQBD}5zYyD@4% z)^I^iHjh3WChBhl*J13jX7KJz32tizL z&hT7uD%d^(Twu^)uLmy{r_trL%}3eJRi8t zpu?U3-YL$Y%kN-Y_J}j8@{izQgAV&~_?S2x=|BF9N+LVieiv)~CF$h&)~nrPuIvdf zIbCw=1N94g=DVa5sV4_Hbng*KYF0df6N{Y{_;Vm%Z%v1YI`$)QX5z8MZJ+tS5IuUC8YmSIP81-%aeIy2_#j|O2?YXE^H>$e>5tM zljG9@hkCqZse_-wDFiCrZQPolM4eMwvF&}&%MfO)1`gD|l{sWK{ zeYzWr8i_uxDCsOQKWCp*2=tVII?rX8sDr5c{6oS6C7d^UbqD% zDldXn@TguXLH&H66aCg;7_3AlUU^bxdn5t3$Sr8jklEZKcVpsNXxcMpk?1ZdNa5=( z6PLpzdxatG2g)21Fh?%L4oECWPrMnyx|sO71k=MkNwmlIR<3K;>PIto#gYFXWiA;p%0M+!V zB(n`d)BaDGL<>tZz1rzJ@rtIHFf(?#Jr%}lAq-I)mqZ?>_QfbEDY0<9j@$@#$2wX| zFr!*W82YsnmUJG2{3~VgF%n3r_ThPq(c7S$9{N9K(A4uXI=>S!?9Ye$w2onvc=kp_=c|+^L#B(Y&OZ z?){~CSv3=*X_<`?QlptfH8Y}_Ni`j47EsLsXjWCtGY6&FQZ=uk*;h6HL35I7zD9F{ zYJNlWylT20lI9!L^hMKk4kivnGlgn~qM21Sv!hv5HCLipOEtHk*-kb0qd7=5PocS4 zHLsv~O*QYM`BODtqM2?kX8VF>G1YWAEY0Dn>5b+J)y#NAnx|CLf#xgKEP&=O)hvys z_dE<%4b9Z5*$~Yvs@WRN+N#+N&7rC}0L@{lIU3EWsyY3rG!LleA~fHr=2|r0tL6?g zKd9zmG?S_`=p354RPzR!wN>*GnjKa1Et(@$)905whmBUvC&T2#8>^b5a5|1h(|!rVZq+(Yht_wDKvPj4?rC`VVeoJ9%Q5L>?+61H=l|-(QD) zJ3L3MU(HyeK46R=7-I=Lm75{cEF-U@&kA#lv+%}0#;Cqj#_&!rW9(+9>KJ1$d8NE; z(|%(N`$G(Iko*oFHt4XwfzODIRUX9*DKNtoiRvwFfElileubsa4Py*@(+V=-TV~sX z?}c8|<0=W*cWp|H;UhN2 zsDLp-F-8D8MbDHml9M$sMxZ%HSvdHQF(zS*2#gWIP8~5u7P2k+WHZNT4Cnr1j4K$! zR#7??Vy764QG^_XKE=#2dcfuX7$b1GjNyebs+*lKMon@$`qVbZ7z;P~V~hqE!yjX` zW~b2@qb=F5nDl9HjjX8gRFuv5(u4Rq`fTb z@)sNHh{hPjFh)vtT8=SNlPxhuT62v0aK=BzScNg-SC&rM*=YmDu#^4JC(<0F3!MLt zG2UQ|1Q??@JMF|6CCOOyDQ%8160Y*c7>-pkMk0(+hn)^#jCy3TQqre^ImSGU5&g#) zJupUcjM0IePGgKtWF3sr#T=s|+~vEp4g-$qGHJ%?JN3SbFu7fW!05wyQV%_O0Iuh$%t zOgHGTpF=uUtl#I!6LW7=tVM--Uto#4f>B#z!?sFPpKy1uVcW^H*sz`CYz(nms2>(j zP<)8l;n? z8Kq^2dqTa6tFxu}3A1NL$WYIOdKG0bd^lF|LSn`$mSGj2C19-L0m{B&6~8&sJq&D> zmp^*f6sjtNxRC3x3Rj_C#WNHqWcD^z;VsmwIFI3@Fo3Vbj8!bg5P=dfR?%{;lqDP} zU4uB%dkh>x*1#Yc$RijcqfoEn2a2;X`wFYbA=Im=f#J(y0EfhkRqVtN1tegs;w{S3 z;z3h_Be~8ImLeacPZ^<}c4l&UX;fXP=h=$^&ZDG?#PqNZds|Fg3q@aDL_I$}S(j*$PN8n2UKGGHAeC9DsEH`Xzl{E0!v3iUe1VvN~F)?x1fPZ6tawGRTP zk?+uXhS1pXi>FB3*$!ZXGg_OzJr961bqE(rC6mZ%lzQUqNr@`79+g%{`&kDQGz@rBMVx6q|j6{+!M z%|~=eL@q-Yf3u742I*1}UDC4V7rLY;H=;|h+2uI8q``wF8*AL=N|zjDJM0dJ(Z#+8 zBjh3H$;V9|CCRn1(zgQp?guLg^*KEWv(?0SQ4-USov5t{Hti$FJg*V7H$hE)p^rL` z<%&0EtttWIAPn3ny>ejTbtS6zXu-t7`s9sKGG;@eKI$v6(&prTunTz+EA7R;55Yb{ zz3{S_ttS@MSYpnFcR(;Tc2=|zv^Od#bG8y13*Uli`b)rA_-6E~frB(cqI%&OFvuwK z6#9%2I!^`nP12=4x=d$HHguUu-ba_&Mi+IpAl#BxT~Vc!E67wZX+gC)tYn6R|am@uha-m!13Dl^nI#;}*hg!Rc3n6RNxO(-AD zVaRB4iu<_N+Xv~^Lg$bU`+(&V>CFDKaCNP#P<{CCu|Q(Np%yCd zNab_l8S-~)_)J`fI)!GYsWLAvI`uy+*P+xk0fbVii)3@U$km0sLiw5wnx#~86Pl$} zb1#}rRPzLyO;z(UntfFBE}A1%^EsMRRr3>?i&WFvRhsKna|@b#RC7O?Csp$lnpaix z3YxD~^FErkX;|4yG*hYO7c_IIrb{k& znj_Jiq?)m4&Qr~KXs%Yxm1yoz%`IpiRn7fqzEjOpX!=aYBD43DW`t_yMYEJ@mO!() zYF0+Gmul8SbE0ZSqq$r)JEOTzHT$A@S~W+Yd0jPc;j2!MRr5rQL_etJWi+ibu!g&6 zdaLGhGy_%h6Pg88)7nd#%~UfXn$1-+0L@XVnI6s2s+k$h>8e?ww=~zOW^FW&s%A4Z zZ>wepH1DWpFEsC}=1?^6spbSUzo_OcG=1d!v_>vP(^oY&py{WYt#L6lOf|cqSwJ-h zpjlltN2A$9HK(H4TQzHbk_Sa!)tvN~JYM>#X5mM&&jz4r-#$bhR9WQYQdh^K=5CkA zt-2hRU1IvFu)s@s-mnYR164i&LXEoIm7g`GQB%;Yaor&`?zrYsmNnH-Q{Jet|6Cx8 zsLHJSLSc2G`eSB^DuEIFF+y|JG{gwe9HGK%x$@nP*%ymsgbwBitucbS;MI>c$6m<@ z1B?+YQR7gfu2GF<%|+CVHETAaMqPuN&YIh(nQ7KsL5;e`w1hQJQM1gf`HmWO4QV55 zKA>i^S(9d`)TnDj`&jcEH3!U^BB)Wb))I9SUDPETcX{ONvn3o|Jcau2NGf#kHL{i{ z%P#4nF3F@Zg7)rjq)R%ZizO-;HR>9RgEa$D6J^$vM2)(JQiwIVGsziV#H?w98g-4N zJZr{aoQh`6c+{wCAaz(%6ywx0YYw7DUE_#m&3cT}%BZocU%%)eOoCs(uta@A7j;Ra zJG<;cm!9mRem|q1Fgbos!xEKow{%fgFov?rQFIy3F6tLJ#+qHqp^JL|7RxRd&}FL8 z#S+yKHR`?90@mC@%_6fV7B%Ya&|22SdnYyP&6@3~QSV@OvBnEEd(4`4d!%NLLyq`y z)>OzP58;zWjXelm&XZZdJ7hLoSa`_3VK{jn3-t@!%oyH|*lCIB7q||6wdA4^uouOA zmxcOjNis}u!=PN1cq7jlSH#Y%C6=gj7i`xmp# zP;8MuJ8G2e8LQ$Fhd!3 zidR%-C`Z=D3>AcWh8&oo+W(Pt=J7UF{~x}l3=t(mhRkz_eOzPaAyZ_Yg$$X=5Hdw% z%2Z~Fh>R6Qqd9~U5)l0N64~8M=)2c-TY3SnXMVH^Pm<0d|??cPYj$3&PR3`1R~!E>Ty78-wHQvc~UHon6+4qq@V!F6M%1Teva! zja_zxyTrxc#xYk&-+Jd7&UcZMW2+o<$#cRxcW_QdPBomKTozsMPV%SZT#THqI4|P- z?VU$(Zbr@|oRM4srAVb zI>Gpg+9jXI8DQXXo4)fZWm&&(E7rEW(3~mpd6>R4+j41}JzHY-TD(BGA?Q+0=W8LM zy`+tcKgM3!D5|Qq+U7b@RCS>}K^Ia*9gi!(79KO4S5fW!zE804b3$9xCZ;dVwwl@& z7FC{8zFxQ?sL%K_!my~`+qG9q?!$J|R$J8arzLe4+M?D|MPH9!f+IX0W2MIWeS5I) zIH4`7KGTn6TTg8Zi>gjh{lg8xOvVQY!=h%em$^24U0ZEYdpPVgp*szB;+V_1`QAB< zvoLgmb5H3Jct>bziHpC|~ccewW|bWv}05 zExUXd?b422eqoo>ewTkMX_vEpmkf2a%f)Dy>Fl!ftWN1$ewU<`waXp9OG$P~tk=h` zmmTb~u&IucUK{NarDc~4Li@PATS@I_4M*eR|1n2lm%`!3APc)Z;dgnfo{my79F2=F ztV_{g6}wakHwLTs$f@Rc`H)>|hof=v&#=pf?9w9K7?k5Et-@XOc7VBV?(D~ZWR9*v zcisFI++FOio7audCti=w;=1|W7Mg4@vDg}7@fnJIMyB+U@Vc2zIm~tQ+|0V}s3J^M zYANv<6W0-2oA@cQn~6J#LrgqC9B1Nj;!G2NBl1c2M5V3~*O-_mi{hsy79;L5u`Kbh ziPed}nAm`L#l%*`+a`7)W5u2H~jM&M< z_lbQ?{ERr<#IJ}GP5h2H+r$&Zr6!&uersY}cEu|uK1fXS21RBhK4D@mVqFuTAhs~E zG_kXZRf+vgtWO+iVhiGA6FU*-nmF)r#dl2{MO<&n1)% zyk}xwVrreAiAohGK4#)VVtx}>5KEi5p7^whUlLoIxQE!q#KXiMCN^8DALm{sz8UD} zqqm9ej_awrFERLMtbQ5-ol*8T0Djo5A4GHA9ItKm8DinvdX6b0bWftUam;mdHSesz zsS!Cj_Q*-hRc}M@tjB2-In{8?wRKzXe2LROa$dzTA1CSVox?aiLnqk#n_da`_qd1A z0U_#gkQvPN_b@+0{=w>hc;xKIF<02HdFKlAOpKgsIOYobP47IhM9%EU$?&xtbA`Rc zJEd`!Mow8AbA`RmJ5_N$h@7@K<_i0B@6^ZnGIB=am@Di(-f4leH*%KYm@Dif-syyM zG;;Rfm@Dkl-sz2VHgYcGm`mzEyfXyndgMI3SB|-czU!T_IQJr_6pp!QPNk;@dv;C5 zNiB3|S4$jo(VWRU+0V#%EOLh9n2YAT-YJNaKXMl1n2Y8T-dR>zr%DhxJ8{fKb4Bk2 z%u_jXF5sAp=DOagh*Lju((IFCu991Lr#4Qj$SHwiE{i*RrwLBi$Z3jWu7mq~r#;Sq z$QgoTu7gKd@r=Gd1lVh3ymFa{fH#EpfD1U_EkC*s`Hs*Y z@MrM95M#k6I8Ogmg$LZj0kd+zwAyMrEXkKmJ?wEV2TU)t2VBMhAM>Nxkh2Qy0SkcH zLyQF};2h%cfaSi`0gG|KVt$Tv3x!X5{5FIBbtx&d2VBbm%lOfnzia)=3GD%I@m*gP zLW~7Zalne=@PO?&pt**w@8?)WOAUnP2yyYR;FxRZR^Is-r%mL%i(@XDyLzYlZ*pFU zoUd`rRq_Du48$1}IahGZW$|e5jKUccIgcEWV=jwd_s%4oX^|6;V=jy5duJBT!pLcb zV=jwVcxN%r%E%dkV=jw7^3H0Ujghki$6OX~^Ug+`9g*`Dj=3!U);rs9zKfivzLQgh z2mge3TJqqZ44q&1Imd#IvrxFJZ# z0qP6GD!L!iUX!Ted2O{-j6>=ov{h8$I6Xc7azQxM;}LLFi1GQDuN@O~(>7a0d~G%! zq>|p@#$XsuU!koeruTTY;T3JL{|M}5-mxL-IsbJgG1vZ6wAEI632Ca(R2momA&$BB zpXZ%_a27<)5gc=|zuY^Cf0y%KZw|XZJ&i2p=rqj|M zkC_?W8)97i2xd6M37U~Wp>@H33T`8#q_d@sk`g-E393A^&I<0KKfm45=KSS|en z@sM}s;-rh5hB#Y!`p)W|r8wCmX9kYBeNoUmpW+k_o!|r=J?U{Bqa{O(i$83t|EJaE=+Oc-+sotX2y#EI2GREgt?pJqC+u$k_9WfcP2U$Hqe zQai2^YC7U36K@fBnwV^q;z1MB5l@+zm3Ya-{KS7vEJ1u=ER*#Zt(e}#LByOUjwTj0 zaWb)-iL;5dOk6^2V&WQN2NO3Ddz-kOILyRvh_9LWunwQ{O%t;bmzY?9xX#3q#LrE9 zinzzbr-?^QY)m|DVmsm=CcZ$tYvKT6D*dgHM5V@PL&{7hzD~?*;#^`06PFSzn#kc( z);00)FIxE)CUW?co$Xd)e-lp;N1FIMak7amjwsGGu@muK6MGZan>d8H#l*41{U%N& z{%GPn;yDwS5pS6IJ~7ca8v2a*kcml;DrPk?EwP}9S%{@f%tx$h;*-P%CYC3*F|j7` z1rwho4l=O~ag2#wiPKC>&-?icP271*TUVNRfVk1b7fnq1 zqvA~y(-M>E7i-o!77znZv*c-6$i#5*RQBBp$e z-hL-$H1YCJig`@DNqo}8BqtT0GVvi|9TPiE(MmQqu{2wsH?b6h~omC8X(V`5=q z783{mqFBJhSBNnarx2@{IEVO*iSH0wo4A(P&BRZL15MmPe8t3XiBnDdk+{Ib3%@G9 zXW|Xw$0pt*ZZ|R2X~hF3W+47#Vou`kCKe(7V`4lp=|p;~LVVc7dc?;~Y;#7jh>2Z^ zWlZc(tYPACVj~k@BepkjCb6f9@4u->bBKxWv2~n@8;CPa+)RAi#Cs)m&v1>2sRG4M zP0T>tWnxa^VH1lGe=#whc*Vpj#M>s;Bc{;D*AkU#PRw9pM`CUhhs6|&n>dbG!Nlpr z+9oa_HZyTKv6G1(68oC?1#!5EyNMG`JVcyr;z{CC6DP$heqiD(;+G~aChj$HHSws4 z8;NI4+(x`^;(p>i6OR&8Po}ri#K%m$LdQ;`H*0rA=HwtZw3R;2mt4+-Hl;S5QK0*A-#L~n=CRQc>Y+`-lWfNNvZ<*MMm|WjB|;-e-G zA?7l1EU}o0X(}m}H!(BuX%q7ho0?dR*wMtY#6BigC%$ZA1L6b|TM=iO*qQi_iG7Lh zo0zDI;uj{SCVp*VCgKk!<|dvou_*DHiDiiYnOKeZ;8c2hhM3vJmc)D}K2I!Z;=QVh zl}t=kO|hPd8Hg=S%t`EGViDqtCdLy-nOKE5#l(8Vc_ua|E;q3waf6BPrc>N%;*8() z6!eXWU$FJKiMxsCO*};W%fyq!#QGMaM5Qhe)0%jLn9am{#6l*f;_JcUP5g#f&BSBG zh9;gNwl(o8vAc=4h=WZ`_K4zG6Vnl=o0ygOmWla^t4u6G++^Z&=@oaH*n@b`#6iSU zCXOavGI28TUlV5&A22V-mk`sNxQ3Y1#7)GaCT=H|Gcjuh#abrjCpIy$1hIpO6^Ok} ztVJAVVk6>fCblKMX<|3x5))q}t}}52@pBV@%&54>#IwXBCjLP@ZQ^a>?&-}>9%)XWuCi{(;COTi?^A3)A7b&-Q-o?oqIlFMoyGX^o(`&Gt5|MKe$GnSF z!8rgM+QgL;m$?;>$^ zXV2#YIPXSIaUAn5(g)tD^OBtPk<%E*yo>aucbejCiJZYW=3S({-gypZf8@-^G4CQB z^-d3*A0uZoj(Hd9tak?CoQs^(IObiX>)siSb0cz+pOa(WMY`vm$vBC0CF$0u2#&d# zpIRI3`pm|8C~_L$n49^Jd1nbu*2sAg$K1@%@0~R`1tVuRj=7m1cxUPmIi(`!GaPd> zzp{7c;Z%*BQ#j^ketqvO!)XvXNzThLH}hM0=Y5u8oQsjO9>?6y{M$QQaBfD<4>;y_W)j^lu;=PtoMb|GKHtVMw=>gu z=LpUtk(1+hIp%g|cJKUxlOuAf;h5W*g}rkL=ZVPainEj(mZiP(^DsGOBWDth`Mgzi z?_9*G89D24%#Fuqz4JFt;k@LX zOgKX$rxH%9I(muls&{hZjE|g7I2~|ic&8}N8<8^}=P1WoIA3|EF3#@A$#h9h4xB^YX@>KC`pa?_w~$lJJMZ8;89AkKR^XKPP8B|;_f+Jx##x8+w0G*^)QOyt zI3MFQ^-gn~=8^Lb&KEcxz0(or`N-LYvjeA(cY5LUi=2x%dvRX&&PzBWA}8$?IR|kj zcxMdGq{s8;GG6I$0Fy!t8&)hobgU8oZlj+IL-!~Yu@RM^JnBV z#`z5AKkxL#iPOzMcdib`*@p9=Hrn%f7*3kVnUAvvC$o3P;be)N%{T{e@_A=EPJzfd zjq`eIIVHWb04EkX$^Ve^CQc>qoEs&lO5_y5S%6c|JJ)fZiJS&F@8Gob&Rv|=k@F(X zN}Mj>qs(Gh-EjcwJ=Qhr-I1Rls5T{Y(KF}GYY4D*c zlW=-QPFI{;ID@@23uj2=Ou|Y0u$-~pS&TC-a@OIb!kO-!)i^UF=Mc^#IB$7pBhK5A z^AAoIoK@c0hO;Jevfhx>4`-8i_TzjSIhAmR;Oz9yf~V!|ikwb3qj3&;XE_evsOZk0 z@i-H3PI>1;oL?em70z^=OWyec=St*!i!&GJU+?V3xg9xw;w;8_KzI4=`Fsc`h0xWL z=`T6&;iUJ@Nt_IkQy%97oSfddfRj6N+T(nJQ`9>*aEeFH7@U%i$SLQYdpH#$XE{ze zoLb(=SVvCn$k~fi6{m@J+SJg?&SsHw6{ikP2k+!!o=%aI{%<*raC&>^37o!>QyQlg z&M@zk#u*+tt#LZyyyl&%I1?jhBu;mnH@#CIXLjVggVP^piFaDyERCF9I74yPd8ZT3 z2a$6Tr&@YBpL?e_&XroaQ*KaZY5Nq&=VW;G`D1^Z6XkFq}-@DTc!r zVms%-n{vkBNj9KLMTImK}%;gs-Bb(|n_8sn6BR8B?jG{C7GIfHS^;?(udfckRk zN6vhlDmX2?GZLp&gfHT)SALGoA9R55>&=2Qb?`*|c5jnGQhTyFC&OV%vBIh%lvKi!T z@y-u8+al)_P8FQ}-r4z#oNps1$t^jxaenm90h|+&Qvl~#oO9kej&mV$>f*G-x#6AP zaQ=>*J~$n466sAld#+x?Ng{OT*i4)ka31o`9h`KLvk|8sPFC+EZy+aoY2t zkKh!JoO?KR?Mr!CHm$jNa> zPClH4-sy(3C~~Ud6vbKTofmOdM^0CqQaBsEGXm$6$eD!m5zY?pOu+dna@OH|f%Bbr z`aLV>P~;rK*@<(~J1^t>96A5s?8mw2o$)xABPZ)!Ip5>l^v(>NTai-<=O>(GdZX5! z&kJ#q3*GtL3Fj=%Bi>no^JwIZ$GMD?!#nG7az)N6oWF3M@XnVw#UkfhoVz$>y|V|W zeB}Izb0U+Rn%+5#^K|57`cKXooW|byw2_>qky9S$63%np*@@FJa@ynE!0F|k12}ym zXAI6AoT1)1j`MQlEXPTjSao7m?E%XJ1n}yS^Y(lmi}Rq+ zozDSIl4hDGqj#p_WR9HXI1l3F@yG-CcmXY&dA~~0Fp7%~KoGy`59Oo~be%^Tr=f%irjB^)f zgm=c^jEbDWI3=rSohNzcb(|@YGan~gbImiyJ9Ba7Mb2iNyg19evlM4}|p)JaS&d`3dJY@4Sw4 zK5}N`oW=RmJ9BaVik#1IF5|@Ma~JkpU5b-f=+4zsIDg@!@yf)rqiFxM$PJHC_!O4JA#XHAwszuIBoU|?FJma0;a2iI= zMw~NT+_m;j@i}tZM$U1Zyv)fs^8-#BobBEj zkFzs!ZsYugbHF<@a1KUJj%0G~;{4>DQ~G+zl&2!68cwoSa(?&D?>Lttrz=hxoPWIY z7tX(tGYKaHPEvi=#-7h{^W;1rbm#Lroa{Icd#6=zeOM)ZZ?-ax-7de%1p2Df&odBm+;f(XnY@F93CsT4cHE?En zX9>=mky9S0KF-_Tncr8B#gfQrkJA)qjd!*(&$`GNgVPr0Q}67<`8;x#<8;Q^<((gJ z_C(HJod0kRd*@f2Baw3z=YckIe(_F@g>p_uPWlvb9>Tfeox(VOL{4d(j5xQwQwry9 ze(A5r zqD16e#Hol=!8=2lr()!!O(~})PHpeJic>do0-UmKs`r&-wofbIjBd0OW5S%Z)(+Ouwa$O&U~DL?c^Nw z&Jdg*y%P(1T+)MlHXPTV-&y~i-T|7dPoX_`Hs z*Nd9@2VtU8FA)=!AdVqEW#a3^ktWV1ZZ&Z!F-b|>b;KGbZWy5Wfr*=m*#m^Hi5*P* zp18`ypNW5&c#)VRhWj_Mwuy-bDmE}NHL6OdOApe4O4%t7+mUw$3ndJMoB#-w<<`#yv)CZsHkY z3lpyrCzyDP_^FA>1}h#lF&!~|8D_{ztZw3N;y@D*5f_Ia%s_n4#GJ%ECKe(7X<~sPirLFCLrG#I6Q3fEG4W~QCKDSIe>JfkF@1S< zdx2QO!~w(xCXOVIHE|+wqIHKVZniElQ3Yn`I8{qs+r+7Coo?bh;`b&lBR-)^zC@+o zCyp`kGvW~wzar+Ti0~b;l!*^b*Sz&jtnjk7wl}dBaj=Pvh*M2$OI&VZH{uZ!8#BXs z6GyZ4mWh*zy(@9F*~E`cOgTa^Rb{q5N^ECh4&n|I3llTzf+|s|QpBbvRwm9cu`cmj z6PpoJSHtZiaX;y4qZAE~(A#6HBhYPds*Pnq~Caj1#Yh#O6uPrPB`yTlUJ+3f>j zZxcT!t}<~K@w|y2?NQ99*Yb%!*1}y#Y+>RG;+rO}CmuBMOJdrmarY4GnRu8u z!NgOafOK!h-XZEgP8vr+(pE0CaxsTG4UhfHWRlHFPXTP zn6Ux7z3`o4WfKPwyPG(Y_=brSiC>!dCh@$9Zxi!2WQJA5=S=*VxWL4%#FHlOBj$V- z_sfHd-Avp=eBZ>w#G59bB35pM`#bS96aONQ9Ax4Y;(8P35dSdo9b(a@xNC{sO?>Bj#pQM@ z@r;R|5OX!d-9c<;;4CjLk~YT{X9hUU0`5F43zn>f|P2aYK2GqJ!AiYZ&*mL%3R z@hRdM6Q3q-F|jf6u8Hl41zWP)3&h4I4j_&&aU^kti4%zjO{|(vFJ11KSf5y?6*IIT z4luD3@qH6}6EB%KgjldO?pWgUCQc>3ZQ?xQ2@{tQGq=J0A-`f16MrR6Gx0KUpNTh# zf18-3fMUtE?Di0`w~3DtSDKiY_?wBviMiY1mLs+^u}MM2c_y|e?l7@C@rsE9iJ9B8 z+bCjH6DJXSnmCL2sfmk;DW1b!O>Ac3M&eQvzbvHqvx$3%**f4JCblr~6!8rce`#2l#Nouajc1t6AzkLi1^S82r*(A z6DtwNnOKK-*u>x)~K_?n5;iAPLqK#c2$(2DqsiJgfHOzcbi-Na$U zGW~I%8LT+Y#2Nc_*|p8Y9&G*3#6iSzFXE0S4l;2v@of`l6R()Kgjit!?i%7m6E_i$ znt0+R#ry*i&JjDBc%3-e#Jj|gO-wOFG20;A^u$+8e4KdR#6ra9G`Y?l;!zVT5gTe6 zJ*^B?+-+hFVr2~_D%Fs<$;8$~{?tXHQeBA8nAndv*2I^IUzs?bc*n#U#FE3NyJny1$#)F2Y|lu?iRA15GS+R_p5I{SNfK~~)tcxbJDg>R*{nfpqmhxUJ7Kk58l?q_89%3{&vZu+w~_#-WQs$ zSPdQr*M}GjQo$dK%{Q*bg1@(kKN0i$-f=-3!=Hy33obFt^93KJ(f6SI3U3peKQ7OA zx5dSOLX97O#TVOXz~1}%3_Rhn)DG=-QfP{b1x4Ur#IA}=@ENhKA{Tfr#8^<0s(u%{ zDhk4v#rIV)GMlQ{!C{k@2&)*lQg<;P@VKAR6dvE%saaA9T~Tx4G-6j&KdMM4wna^4 zIDLq*pew@}#jdEv@MB_ARL~a87Gf-@4d)PNwJTW(&MnRkyZ_=lWmgwRsI#($>{e+^Fw&Kc z(@xH)9^cueX(tM8k88jwA;yBa@HDaO@dtXIDYiZS0?rCC7VL-Tid~PNzzf8-$L-*v z5M#kQc!}8cxC~w+u3Te=oK@{s|rpQGeeEJ}!1W?uAc^ZI9oBzl5kiX9S-SyB;^f z=fnwmOso5gL0`&#pk&zN5HN+u9=nC9JPrU;3)41FtsWmvt0o>2+8(ol4~G~FlEaUR zU5~HQb0)F-c?7eB7z>8M*~PBMu5eDV?Xe%2C&XCL7S1nrJvN35i4*iVJ(qeMPT5au z$Uctaz&akMg7rME{!wf7jL_Wm4<7ndPwfqb8RsR_H&+ks&`+08;i#U8&h0T$~FIs)3_Ij0MHvG2%Q{ z&j*ha=ezIOkSE3X2lD6(!U012^py%69HL%XJt`h5b}j!3 z4;R~(FM*>%j0H#GF=E$pHh7%awwxcF5MnHN1fDE*EvJB|iW9WFHJ@63Cb?cetksZh zc^yr??{UD_!Vf(T2R8`QE#{x0)wKMv(6*d5qwq_iZTT^9Ylty@m{Yt%>{`CYlI#-O zmT!Y!hZqaa!TZIo<$~}5v2D2|cql~u6;k+!*tPs9d`z66ao*uJj)^5Fpu8Q<+1_9?poxH-gFP#)eUc2C(Q z;GJUk&td_1x7a*KyI1}CSMIo8Dh3DW^NI%T8XW`w@c1iuU1-3QCCd-r7273y5{xV5AM~`(iIa%!l061K5MnI2-CmqhY?mwL2m zAH`xgt=KKuPw*pRyJY9U3?asXLvUuXTe8h?RdIG5P{E0-M3D|Y|N z-Q@u+ApU=^BzhOo8mHK&b!wvFha2YPB`DZTXqP+-*uvuxu$9m*`6;lC$ND>j?Syv8 z&ola*AMMmpb#xS(B@eEEokP@l1$Ps>pR*cp53ybH24L?HV?hbHpV%&Wd2m38u^>A< zSZtO&C;$!(F&3nUhl|}a=O`ZUQDU>?K}v?lgcu73F+5J}PTG#}1hIWB*Atu^Vk~F@ zPZhgI;2C&^*uBoE4!|F1LhJ)wtWZYSM#*{5;4$`5k4;~S4lKG)s{g!U1t*h%<< z(4EOK_(!o@$DHs_V!Muo!Jk8n1sUPfV)uNN8vae}&eg>51##w;`r(WPH(8pC;w-TH zFFs9CmHo{cJ>JRU!?H`S(obA+kA?X**OVTUJ+FBl6uPo+bDW37uIzL0!(vDO|dBpBVY!#eeoXvLmG+a>p_w0_)tnab$mzt@8&^}seIt!Z%UE3R3hE`(N_B(J}v2A+|_*{s( zl7~BqUE8n1UBtHSso)DC>Ix9*Jl#=EwSsfE$gsYZ2RmAE)6jjG=`UpU7wZUm15gxZE#J9 zy7-6R7rQ=-!0W}X&s^}wV%KLTc$4^l`aE4+eHNk5V;Z!5#=zqq%Y7sK$zwMj-cv&R z@Ghmzb3)hlJotBU*fxAwY}=j&{t=?uhW`|YZNq`oL4ld>XWESKz0&fXCn2wUE&E`66u>@i+o3>hWjfn9!}l5xBJ2 zt-?0AoY=0yKJcj!b&(HO7Q0ng3s)1HRWMIE@kL6gMQx#|rc^Om1GcDk;OidW zpr~m=TU33Dnk{riRfFe=T~Wp1g<@M&S@7);V?jRn9kDAaEBvnbzM?XeR8d{2;tLJf zq83rbW}&U32fOVQx+*%ryTz`G=I~yzsX`Ax{3Rys%cRG(*-knH{K;dn<=W|#&>rLY zEy7S1E)p_`y_`bCo9q72P&_~8HVOx{H%pQkQcov~;EA0wlE}>hxWN==wE9x3m z6cF2@Zi9tGj0IKUqGDH68Td)@eMM!Asi?QURTZ@~VApy%Sli>P6jfJfi>gZzjfAeK zDsWS=E2=2mLTrmF4Ym$37UY53iCs~T!5zf+6}5n(-lvL}G+>MR1RUxy^?TawWudDg zF+5W2s<^_muZV3GH^Em!j0I=l*Tk-h!8P@vpGo5Ts>oeRRczz1OEh4s*b6T8c%7rZ zD|A(yhu;&sDhk7^#kPtVxGuz4kQ4q;?5fBJell;61ytW!AHcliY(x<5M#ju@CmW2;to}u65m%vv3OPSJ5~Ix0b9kN;7yN( zS82CfLRUpj_^#Mhks6LG8&;7KOcJ6_R;qYF?5ZdOrxf2;#RjUlaX^R7sR3KXT`;%D zE=-$O=&EP~7ZAHDo`wsH?OHSfi-s5rD#A~ST@^7n5Z_lt?b52^f$wzKIvTK5qy_7F zT$xCx(=$T*Ba?BpW@##PMWu#Yh+R=PIZA7>Eh;g??Lv$NR~YUfc14|mpBLX()JclU zOcld4V2jEH4)@r5n|2#1v_<{HQN{^fQJ3KfVpmiQo-DRSRRpJo7z+x+GsLc_oba3C z`--YrMn!#>K_}~K4cMXzt&z7@=nk6${y^*wn*rV+HiwM`55gP8kJ=Z{iQrGf8U2gr z_kBgwieSK5!-I-FnlaT{rM$^Pl#Q& z0enh)U$>3Qs)}+{@wWzSx7EO#9_KObEupJo8hlsms(2ZWD;HKV4oniF-Xwq@5W6b6 z!70V}RgtWms#uprYo1dBwu(()ZjURc>OGUZLVF^t<-Ex6@e{D1$3@7+g|6f`;F4lj z@(8$;*e=`zuuO=t;6=E+*p7ej8n7jQ4L0|K50lwz(3P+tN zv_*YOjgvk82)^#|H1eB5SMpJKj@XsF4W2KyCGQ8{3NaRZa#APKVzDcEBjZcO_mzBz zlFw4(XBx02Uje`HcwvTi+bncdoP@WDT@}0Gonl+XA#ityvEU1Muh>=bFI9XazORaI z6;#DP9QLdRY!z`?h37nG*`cMmAhZiN=nc*ChtL(3bEf!Du`4PS{I}Q^l>z)W#8_~T zqV9-YQ8(aw;`@sFf}%!KMaJ@BQTeDMv(Q#Cn<^d`x+*5axx}uD(Qsa|se;$3k36MG zCo*YFn{B60GHJZfPP&PmDhS=AYv4*^H|Y|%s@PAulSyYXX(Mg6lP&<8c0>g05n_xK$bM9%3x`hT&dfx47HkzT*29_oa#| zc^NfM(SR*^EjZQVZ?m=AbfGP|H8sxk*advk<1%VkAao_qgBOWi$z$OqVq5Z5a9N14 zU`LwpuM*!^a+^vjc_TG$(||2`3%JAM9`GxVYr3n(-NHxH@}Y>@b2RDKLQ`X~ zYOZj9hj$r;cc^qmDS@xx=30f>~SyON&bMx!(fUKOApmQnW;qfK`J|6v!)ihhvA`l;}@IYxoPTJj*G8RMLqvSSM@YzAJ^Z&XFOg78+yD6HWJ#Vk1f!=O@yxL?QnCk zZTcIqRfw@*I*ZU&?3x}1KPR?Lj{`e}7z_HsUBs^GR`3gA+jM8JXNa+&0o+IInywD_ z7bk2wOI0A^W3ztgLXl=FnP>B?_u-X%iUbSZe5*qyyu7m8Pi z?b(|jTot0OmEpBwclO?5kvs?(whwGU@M?&9!xz3Tb`R_vmgFz7 z>+u!%rr7p41-u<%EEo*`Cw4t{fD=9CdJKAkNki28dT?^Fdkdg0oJ#yZ?^{)`u0^>( z+r>3#7v(xw!sBf)@R;;*VJV?qlyfXfX^)A2*KsNf-J)Eg>uO@VDF1*pLyQH#z_rD0 zQI5d%#BNar!VScBQTBq3LW~97;ih7@C{5rNV)MWU?ZMU|>LYw`JF#1oif{+<|13)L z8d?rEGP&s61$(3?C=t?TchMKUwdMo5gq|ogs7)-9)VS2_l%GSUMsfG2*tn; zLW~8O;SFNE+RH{>IL0Fc6ySX%J`j9 za4BC-Xcy+dW$jZrnxijsRJ(7E|Zy=lG4C8bv!DhnwEFQ(bnd%1#~qPU$)D z^Fn*zJM7avn&TSW>%KXrGDltJ80zO3msoSW?B{soiuQRWnj<;<>V0z@VvhH6YK|Fx zj_J(thM%J#`^<~x$PO>OZ;pXaYmN_@W2K+tGjO%Xc2~8}TA^)i0Y`Y><8tsrkByN( z5xPh1Dfn}-eU5q>+#I4lybNy>yPv;+`gV%V*~JTm_?1++gOZMEyFE7su-kE=JIV|2 zNpW~?oMNZ_>~zuZG!f}?w9`oVkNb9-P$#iIgxIB*F7o|ON0{TD$5UXUN?{%6!6Y89 zfyq3ky{-c!7uto}%}S;9cnHko@ya#HxrC;r_^Gwkz`txuscrVQ_lNB9V2E+?>v58D zkcY#K!528`L)5MDqs)<48|(vc8Y~c^K4tfZxUkqg0K4I$V*3Pm2z)X`T~fk<*gXL* zhvUWe3GhR(Y>2U70bD`so&d+emBi)=FqjTj4N>n=!ZpP1;|p){2t6$}Z=Q!Q8+A@h zt*g#&vD*DKYR`!;KNh~|aThqy<8yy%s=-40SbUUJ%QVE}7I3u3I>-}*_OZyy(VDVt zn6|mMAlPGgh+5|uuwl~Fgoy&uBLe#rC@O-gb=PdAB zVzbV6CF0+$r@9W%=O-Gmt8fhb%wx&i!Y@3Q2R94dXNPWR)~!PKWAp*MLu`Ba9NZOR zEO;0GTI_n52JaW!9_E7wLW~8k!iU7Jhd%HTu{~FYg2zIP1(R8!6JmF+jD}B%-3y9A z@ULQba`b@DivRcI_@cg+r8=FasT?j#eK4)ZX5hmf+k@$ac3Dc5)5T*3p<9+-WyP7r zc3BEDoHfK)(2?QC#co;Z!MVhCS(<}+L)4#sh6{+@vJ`>~i`|b>FY%7!AKDHfyM_>wpJ|&7uW^z#$>V zg6H6u#bym-K^=Ic*eqJm6nrJbSTKc$gs25cTs5|15TkIt@N8 zwu?F+{4GTN{K6N+Zc+Qdm&A5ahk{o_j0J0WOs zF1~;}i)|OX!EPbOf_61DTMx18Vmafz#kPwN!G0m?UtV~C*mW@-9xP7K#q37v;tF-n z(va=qA8-ycnJ(h;3FrCI;#D-y0-@_7FT6V%Npx%HmaG z+r>?AZHT(<1b-lQU0k4x4dMh{v~8>|Qc~w34cRUp0l#M^(?#9!@0$-i^Y_k zPi(t5%5cFDW5Fzji-=tpli*_F1YKO9i$2s@Uqkk>cnNI4Oy;o|4L<8fyVTG;jfJj@ z)^Ibi>!JqSQf#|u2(}3^7Lq+o3vFoBAyh5Cyi-FD5MXOtSD{7a9Y!{utJL7vIA(#kPx| z!C4{3g0JDZV%NoHc!4-U7gJiQi;UFynTBi^IlwPG76dnY?Dd-F*(!8hbcA<^T^IG> zU1HlsbMWgB^^zanFLqrNfe(mn7xCbs5cNSL_=wnbkpVs?PS8c;R_dYzb>7sF?V=ob z%VRb0j>qN`G|zuR*F`-zQFY%%Je*W)yQl&t4^h9D4yO{kE;7Jr#I}o^V7d_X%k*%1 zvFqX`y2vO_(8Xh|)kQt(ETtjaMN_b}$2ac^%X(ZgQS+1+x-MqJ6~*qc7!6ku+b$-9 z)kDi?^t=zlLlV%fSI2-vw@8lA?jna3{MfeF4n-)#0k1s z)<#`?LY?b0WV_e~e&BI0xZYzhMe}?lbX^pLH;G*rkHDXaZ5P?WFGJKXF~eKMVHcFW zLu|YF2HX{*x`4kHhh4z?#R90iCq^>;6ydTF4}`hL)053aB{Khq9UA1oS=(qbTRRs>MW!o z+r><&4?gBq4c4aq&1FKe(N$SioVM zXuwvn3~c7H*g@^qLg=c<1Gg5tD$>C1#I}meV22Q6L1OrMv8&>r@5Eij_f>J1D%Nt? zks7d7Yy?MpyumbMgszGU@Hnxnq5(WXY^!JmP7W~^REMXET@_{F8RGk@=M~z^sg}VNriSsv~6=+C}{f%o(D-`2o%&c8j_P&M&r$dKfGeVk~G5 zKOuIDS_LjHwu@R1EE%GH@ft2Ac8i)5E+e*!S_CW~Vl2o2R}{NNO$ApG|IhuCx*fGf zJ?XQX2JLw`5bQ3ri!uW2=||K3sF`{T-491HxS!ayef5}lfY`Qu3mhC`EO-JQDt2vW zgolf5+qu9|A?hQb@EEacI}RQvPVoHpa3^)~Ok&l!OhdMd=HPN>GCwcRf$#azhQ~F} zDxvG52E116x@bgKABb%ifj}Ud| z0q!k!UF3!PiES6f!2u!0g2&*&V%Nn(@KAArE(&!~7rm%+u7+$EgTVRBWV#p$F7%^a z`3BTQLf1tbc!}6`Q4?M!wp~06t_V?2{qQQW>mnb#R&2X?68s=UJ@vyI#IB39@J4Zh zF0RtWYt(r}L$-_Q;8A8WUCaZ2^rO$_&^#xEu8W%RDY5I~N%&W>?V>z*HbmXlfzOLw z7ir;(V%tR)@JfiWASrxJ?7HYr7dONSy7;K8x_E~=(?1<{u^P-Ev|aR1D$L|Zd*;+U zj|p8D9pG$Y*F{}8huC(}49p#3ET|0U6T2=7!v)2*i&9{b5cMTnbWu#~x@ZHJ5GUwj zST}Vsj5-@?$UYWh!A8tv9*Zep6F=HKm*#0EbY0YgTZ&y5@o*cl?V<|UK15w7!X3q~ ziz$@dS!}z=$#Az2W5Fv7_Yk`-2E)C@3A(8Ag1VSRol`VqyI2HHWhT?b3UIm~t(sf& z%oMsVO2f0nu8UmoT(Rxq32;G(`ekT%k=S+d5@jzD+b+g{%R) zd3Sa30d;<@A=|~L;67$DU2F%x@uN@X(L4u)u8Vx|A+hTsEqp|5yT}3_3sIl0rHd0{ z*F`7zl-PFB8~imy{kA%MR_wZ{51$t&=wd%z3{Ivxlh+Qr7zL*EI01anXL#mpY+ zVg_|q*N}ZI=7TjoE(M?VSSO$6sUvh2u@7typj$Z0wH+6og zA=^b^zL{r>#{k^saqIJ%XNS;r@iDwh?7Dax{#tCiSOxA6QHu*75W6l$!iU7Ri;3Wo z5M#jr_?Xyr@dA88oS=)dbWwpiZ)?bQQ3Jf|G4D{}J&$j7);x*o_%3F`NyV;<;c#-X z?cy~sRfzfxBRGxNb(g)T{NfcG8(d7JO`HZ z_ySnL<8NIwPeq}7ERMrf#IB2-aCNcm;s97H#8~htTu1D>SPIt{+b-6D4MWuT9>9&o zu8a5RqM0~B7ybIEi~iI(P(!whVc=kol^Y6&cr4sa^9&QZE^@#l#IB2!@My8^;!$vH zh_T?muHx}x*Ts2wqS$uvCpaZUeGd#>OcT2~P zc)!?nQ3^gFPSC{{bn!fOUe%E8q8E70;}6}nbBSFQcd06`*jAB( z;Q}GXf-lRfs={Jd#jof^#b)tr6?>@SH4a-t1Gb9kU@edJduq4ZLRUpqxSrTm@dVsJ zY^x{@HVRQ6M5C&vVpl~WxP|z>DqildDn>o4!}igDtzrV$&tuD8+U-T5{lMJDG{S)% zw}FE_PNjwsLRa!wc(mA++#4P%wj~b%$A=gTI>8gguH+W*6!Co}7k^PD&!EPo8n7kL z2jBI$nvz!tZOQwoaizzj;A)SHk=F}d$+O^(#jfO0@F!wh@+9!{5Mx1(N_wm}i(Sdj zGrmoHU&+-6sN|*8cuWJfs?b8 z-~qAwUX_h-3i1DZ!AQ%2T9nPST}Xp=QFenxJbnij^;oKumb$pmF3P{GLJ5ya9})&0 z3nP~oxZc(zrRmAR0tRlU7i2CIihHHu4qTFK9>WJ;4BxAUKi2CIih8v3A z^WPb`vDhujF}Ru7Ey_1=3-SLf$|)A*pIt|z=W`iGid>dTvaT5P(eI#^6je<9c zT~XcP&&0Nf$}> zyr?1D#fRW!kDq~8J?;Rn2{R_;TcTeot!e)hnx=v=;NKzYN)P^5?0Ret-x1p$JA(H@ zj0N@J#PxlTt7$5k*!Eb3;S?e2(*z7ZD0V&0f*%qm=&{#J>Ty417uAsMaX@2XagW2n z5+28afiS~Y^!Q2{O^+GutnCR_2~ocg1y>il$8jl5 z)e_qt>oQy?M7@GzxW3r+_&VHBoS?@*f6ywJO4)rhWP6+g_Vc(He9_}Gyeb$dbZ28V z_$9IHq9{B}Y`Z7}jtDUpEk(=dnaN&GUiKb@8y3 z#ZYj2h_T>#_$#sNq9wdXoS=)J^yj{Uoz!_wL$-@=ng}m=`~ke^@n`U|Fyk41ODi)k zjjjsq`IZN~9%3v=1OFv4hu@Ri;nXt#UVA2qE>mN=o zc0E>rQ;8GwxOJF%yg=E7G-P|c4i@ov8!YNEX;WcwVTPCanW|ht)0Pn09_xa!5cLgR zaA~pYF$Y|Zz0J>5VeqLCV?ir=t}J#vR)?#J?c>-0tQn$yiwmwTc0Cq@>xmQe*!gAk zn1-@@Xvp@M5$xqL2iQlLaalGsmHH{o(@$ud$^;GwQ8(|Xda&3v)e{~nwoMHNhldyo zI>4jEuBm457_n)}zCyl8jkTMpiuoF_H8uhldTdD*i-hh+N! z#8}V|z9)87bb%8$NKnP_5vpP&hkZ-~wu;xltRB~l&~Dj{bofD$ao0Jr)|R-F6CH6_3Na#jc7J@LsX4 zB0cy`h_T=sdK?UI6DR0#-B|TFfwF(mknQn$E8%I6x52X> z|BtOZ50tTf|37|C92~N9tPv%oNcS8z=GqgFk%3ZO|xmfOwP0qDqPsd0wQ|^sz&e3u|Y;t}o4s?tJgXF>3=IkL4#Wv@7 z&0z$#Ifu%l@qco*9zxENO0twile3(-+_QQ^xY9GSn=P$|HfKS39kw|$%HLp$Ea4f0Re<~$<*jBU=J<$c)ZJfb-q!2iiv?L%_bQ( znw-tVyPn%0<{VsrA6rU}P0krwPU*;9hMXGPobBaw*yQXk zW_09Hyqth-&Nt+2*ygMx=fpPWi*j!KpPa>qlCzzHm1EK5>?*$O+2{#A&04{84Nk6&ZO$BWU2JkbAvSR2PieU^wmIYErr74ZrKz{T zHs>X|HU3Y|-pYBq4vWKCG&vWl^O4XdnJ#~XZIVyqaX3s8!)M+%Yb(7qp6PxoyL7IZ z|J%xU@|^!|Wwku-!L7s(V=IHTm9>5=>-KZ5_5a(-XiiV zt&|wS?}+UG-&Xc$s|WwLmG9-l4{l|Gw(^O#a^7zx)i0du!vD4sBme!stz6Yst~|Jv z!`jNFX>27)EjQh#bg4LKr<+Gkf$ek?@4I!1zpa&7FcbaGv65|rVKed8NA z^8Blo8)KWGyWA9;o6i8Tg(IJ`mRn33`bg93w$Xxf8axruuRh{GVIX zpCg%3apj!EqM6Z);$+WZGvE}@apD)yjO;UUs$ZQcPKR0UW@lti9cH&Pp&40magJjo z$Rp3gc4VpKh1iTNL0sY(399l%ukp*U9ocigvc3|Vk(CqIIP%PdydK+;Ws$$dW@LHA z&5n`aVR+>I~iD?}p!P}Z!25je4SI&&hoSKVS9r-~u zIS00LdP&ZO!#RbwC2mdKMw4Qj`Yg?oxu)z9%Xl6Z%X)5D%67^@n_{W_3brX)sqNRW zNij#ul^ywFcr91MHbr&0CN?SF;u}BXYdi7@3@z8iHbqIf0gg&h>LXG-GmAcZvSd<} z5a0LQp`ZNh;~BS{?ev2-#jRy{Ahs!D)63NpVgb>&OqW z$rG?mu}%I2N2Q1zLy8J&dnHRIMRjqtXFYMP=ff-5&U$E5G*YT>u}x7y-i%F(n&MW+ zNbtP84cin?$UCq}QB>UJ7zuL7d$3KBPTr5BQhcuz&D7_=ESVJT#A}{i#T%X-mEsn( zDO$*Pu}x7`j;ZZZ)Dx39MuKv3GHg>kEyrV%;yLkQM_$5^(_)(L&8 z7GHCW1h2}Ku}x80u7;yh)EY;Mj_UJmmQ0HG#7>_5#dkcvTg7&|LYrc>+#TB#)8(Gn zq*y5ScH}1k<$l;HVVY#*<>0`kcp-Nij}b;Q5)j z$g{_4wzCA<6mQGRuuV}{UWrYL=HePh?mFf5*rq5he~V3um&DDEk>FRQ*otk6UGg>@ zmExFE%v7IeSu!aWis!VY@PWz)bKqZob@v*!a}nAUTja~wrdTBZi%p6(;&n%U-BZ4W zZHiCT_FZgJOww}988EWJ-%T( zGoia($aAnwQAsK1VSBsK@mK!ZyWP9`eT*#wNvLEf;mAki%HqeFVLnqDIdZ%#ZLJMHYpB@#~gXWSU!Pmiuv+sY*MTg&pPrh9Qi!9 zDN@K6aa4-^O0ijermpK!>=4sJlVZP^-mf-K#&$A7o1(6qfNhGG^;wZ6b1eQ4D{D*Pu{bjyR`sjH zlCz!a(5C1s*TObM8~F`vQgjvTIr2?bazkuW3{u-out`x%%gr452#c0mVw>V^`7Iok zqUjV;TvDGySTZSYh(oodFh%SFINYxmj%Pa~p-u6a{1LV(Qp@A8Ns(3j*pUye%agE8 zF;{JWhE0lP;uns5zdHA!@zbzPF+uAyaa4-@pOYe``uvV1lOm(IRa**E` zJ3m63qJz8>+Z1)=-PojPChm3QNf)K~1=|$WF(mkWb*K6bqCh zpZbig=Ta0FlX$LCA92vOy+}@hZQGONRM@mVLrmis2}a53v2A;xoC$|*o9EK_EGW+t zX}3?YU}pK;LRi?d-@{z&8ECucCI{Gd(L^qWO&4v&5{`TgnEX7pUA!ij!4Gt?T3wXY zZtJjMx~M4D^Gry?#Tr1{MJl;5wp~osW}9Nu#eA`aBd;dPt+DN5xZD;$&_$Uq>Eb87 zf2%(Wri)tYVxVVT?ezm_yQm_6h;0|e<>Aokq?Q>W3cTak31ef(8U&Y(NMdc z$AamirMSSeQavuV2-+@Ql)uKdiznsf*mRL7u5#pQB<*!Awp}!rH{b`ls5F%>-qvpS zvtYXDE*|h4sm&gOwu=Gs5p26?FCW9Ei|*nHM_wP1Ph;D~8}eEFKo{w!(M3P)_C5=y zi=kp{eaBn+hWsR+SL(BsIB1(XE2qG=sXcNkY??YMrg7xEBIWehHnl{~gu|wSbz&Ar zzAIABj_oadvit~+x}_gbiX@BavlL4v#lvE0&&*;O&zlX{PFZMET$IaWo8q8c0h<&j z#fpxRV5eLK+Y~G1>e!^%B-V0_1oP!LuuXAKDeB><6jP>?BA5E?&XP%yU+m$T>i~}o zdwG^@#CCc^n<5h*k&N$$ZHfe~55y)#9&xZEUy&dW#Wuy&hIj-vDPpud+A$KO)$&+u zQzVrq;HVVMXONH`&fr zXj5Ekf^T4(;&=HrHYv`F_Z%a^emS;*Pw}1FPKr&6U1D-ae%VP*iEWC7a%vov;*wJ2 zRG)=dGAZ(jPkR;?i+E0J%65uEn_{9I!8S#Ixi~f{Mu;UHBf)bTLTPM|MPB(uY*IWe zmUHBZ2l*9jQ#>rchNDs}pGAt|>a#UVCdG?l8*M3kH1e9*&adiCF7X|pP4P@~w%ZBY z6sOd77i?1G)AGBHd?BEgdtjSlv;00bDSi_BI`Vx`@&Ig8ERa9IQ7L-OCPhv4Ih`ew zqVX*_Q(FpCv=(Rk)eJ4!&Rl3yB$wx7n<9qS-QyQwlcJdTwIk1;YY5A+O|f5Ig-wcc z;#x<(vrgWCZ3?}0Cw?Q2N>O$WDLSdoV=S2zJ;dYMQkY_Zc+#)tZcW#xp-s_NDb8Y> z;&u5vHYu8j7ajSUD)}C+nyAlRESVHg+)$sLSu!bN@4_ygDaCG{xmU8C?$D-qbOr8-ZHkm~Z){Rz7W+B!i-rn4 z5Ze@g%7d{<@vk`4kzd@9M_`*`uRIz@r6{_P6dBd$0+vjQoZ=$SeBu(%0ZOqH+7#X8 z71*X|DzC;SMSF3bBlnc@H`u0lQQm}2ib~=ZNA4-*AFxgFq`VzRrMRvXh1KVuESVI= z#q*wd@4*Y6jaRdsOVFmMCI5qMiqi5`Y*M@`-f-miWaQh}rpPJZ!zM+3F}AT~BuFnO z#WqDUIXR9>v3?OL3aQV0ESVG$F~4VNv7l$FwQQ#lv?*fb!q}!bw+0u*CdE}T;>h>X z$;Givu}vnH1H;=AL!MmY&(yvz^w^ zrbsKd#Wuywb+`jIDUxcrlOsQbtmQ7)rZ_0Si%p7?Vh=~&S)&=fk8O$sxi5}N5x;~K zP1WZVmQ0Ga;uoGbH*mqJ(6)V1o`G%KrPSwaY}!7l<*ytg!82N3fNk6PI3-@wt6W>L7b&(W5 z(8XkRu}r(o!Gh^xz4(Y{n-pv&H?&=B(Pr~v+r=U|A2waA5eqo-Vy|2X+gVJK3*!g6 z$g`9#wraO8vtYW|C06j9r!HQDwu>+2%Gh=>Os^W| za$anv&_~SY$mfB+=BiWx+bQJKdLeA4kY6n9$iJL&QEaD>Opf6HOrgX|rVuDtJr>P% z;d!xv=X(#qMxOn}CY~G8u;HfAPGPCs0^2D}ky~Rkg*jqd$4D?%?ttwSHfTznu$jU( zv5R9QSSr7Z?G&cSJ+PU=9Pxcewl4R@b_zq}0r)>txUVTpe49V6X0vFfFibh;dX5w4 zc|MVjEiHgHb`E(lwz1>nrP#zyC$4bhIS9pGjcx2>@;Yo{pA)}vPDTG1l@` zY*SQ_Z(x(++B&YXw;g%QpO)`oo1&;3+w?yvhOZ{YO7)qWC6nS?F^^}P&K#-7Jlkeu zJNckZ(L^qQZHg0WyAU=hE{KI4Bf$Z=D7Gm!$`Nc*>=27P@-=aCNo-ThlS|{MV^L!b zDNZJ#?FKBF6n}}0Jg1`Q|y$d zW0T^bILndu0myT)O)+1dk4=h|;vz>v%U@%g;$wL^j!JP zrmrK#W?l2sHghTJ$I*6r&*oxA&mZ_+_V~=urdTg$#WuxkIR`c=z7}&i^5{d(gKdhz z^5fW~7$fF)>tK^2n^@nGU$l}NVVmMY6Z|GNDQ<|(9r^2DDOzEhVz1l=N2R!=6hqYK5SC1e zkHn##G0nK(aA@1U%2%hykHWU?>gsC@Hf^8N@_0wyd#>e)*tT6#{uGC8o4<0FZ=j1w z+U*h+Oc&F{rJnP|<(@C|ec16Up>3+9yawB*UQ*NRv1zJ`_^l)FZ;>}++f*KTD>k!y zO5EniSG3AIu$^Tpc^8hFWv_2YQKA}sUSP?jcuBnESxLO?xrgt=j=utJiYZEQ4cin$ z`WxREo0SlHzssS&$`@qLEn0 zvz7R?XJSjXQv})+Ps-0?nVVk0mJP=2v7^xJ))aO)|Oo|%S;dIYmTXVsg(6+rxo`Y@M ztL1svwEdm9(2);j$xEnq1$+eKqJ1%9B5+?(m5k9M1z1=Gb4F^}gXOSsr$&~}kQegfMr zR%o*YvFReYmY;IupIj{$!M2MpezPi zf?NxmE?yJgaEt_jTo2nW3djxd16>sQjxMHYw_R8;UF59+yLqnXDVzB2(01{)+!Na_ zY8>N-OL}9|#cVD2bL7i&<$>6C(N2HP9{N=;xr z4sZCuZ(9D=kzXW`H)H#E-w*Ou{GY%3if?5K)fDVJi)IRS#S5NI#Y>)T#mk=Ocq%3S z3ba!=CSSvL3fttH*i2!cc*l`vhUNR%PGOGxP)j$3rDB{Tzd|Udz;+64HKkP8Oku2+ z(>U_=eOgYB?G#>@GvWVCA;_>>k9ErxupLScxgs`0c|xq>$j7?n>evqD7Ejc~*TUwi5vS!h9QkSrE!V?# zC|5OwhB)fqgyYKCTy6Ja$z*IV_V(;1_VrxLU(@mZp*^&VmNwbM}4kj$)p$}uJ$~^pU?4Yp>6ws zyaC&`H_98aX?utGog>elsgLimZF{TyBYxn%QNV`4Gg6U$Cc+&InHC*g8v|VJA z&tls}68StfU8E5&I!1yU>gqDKU0jg=#Se7RWgA^w(QZ?c|fz$T_g>;!!ylexQpIKhi~9Eq0s8f|*4cvAAazv4rOV{*H?; z1#MG1e0OM5)RTK+o1&cD8=DkW#eR;FAPs*&#Sg?b#SNtz zj7^FpS{~}iyR)@C0^1ZPUBk@N^KBgt_ z#5Q9`c{h&ASZt?W!RXMGf0I}WGZydJ6<&4>K75I%-L81%oyTW}u6q8g$k#o86>oaR zr6$8|Xb1T*3= zawUk?6Go?;q zYe&9mQf`awl+x)Kb-+}Z)9w*PjCi3UvT*pZ8p*$bk$nVIDu(@LN z7Qc4X^U!!XHdl<+;wnd8b<+UXVspi)q2&#Zk>G1BZ^Zw-Vl>;$NY`v;4(D0Tv?+NE zH@$Z|@aPbl37>q3=i@GU{w7{_S`7H>H67rlHN+mT+$fbU^5 z(tBd;Tb4Xbl9OUP(pwsNa%@H#r{$E6JWSGZYHUY(NKS{%NKc6w9V5X{asm!V>TWH? zy8X;Zs>Sjx*(F%Z+$9tDn)h@~DFyA7t~M;~nNBR@nN2L~xiS;GDF@9+Hi@q|^8Rr7 zHEc)nv0NFOkxUhy$2oAOx=?FtT4+ADjpeM+%KeWq{YQv4)l^gN%H3ucD4 z?ce3B*tY$noCBM-_lvn4x#v+Id9ZDJw){8_+Yb9E_QyWDIH28@Vj{Vo1wXs%v*wJ!cu$4GEOu7quZ9dcD{5*!d~IP#VQ`E_g) zUC>BBl$?NhO(A9&@FC~ zI2@XhOcO_X&J#y_E)&Oi4&u4s_;JvTWVHCPBM&>|N!X4=uNK6AhRsOc7Qb-hafUn% z+mXB^&%|aVdYvPFj$gPx@-iGflGFzn$$G^)z*?qS z8p&4i5HuqhPzN6N94;R9eBoj4(~o)X=IOrpfMIC9s+~Ut;@`(MWl^~=HYuMM2RJem`2%cI zrjtL!CZ+zijvwyGP~=hAro5#gjlp3`cfZ{J5GmTJ&qXYm6kWw7o_g#ZzZBZGtII2} zZM&qr8k@FX7S}mOf+F%a*tY$+ya|VGoBQRyztTl-?e-80nP$gx^%^W5hNh{};!)4_ zU33%k{6wqAJqPj6Py9(}u3maP5P!yzJ0bZ`Y!ft>|H3B0+u|ih?u6ujuubrid=;C) zR}pVG@|UfA8{5HmR^WTsT)o~GW7}Esv$b+k9DVf~dzg_-RjmB1WnQW~p|8Y((2QiM zSje;9T==wSGqH&0Pu#}ii$XJ!o%9nQapX#_<>J_mWPw}~n~|&%OFKpa-6hAri0w#5 z$mOsZ$wcuLN51l0ehu4^w391iGm>}3YL46qX@WIz^hjnN(REd^y0MmNuSU{U><-OH zdW$_g2aCNtM~l5Z-)hfp`a(03F5&>kNYF_B0Nat|qm2KM|Co_HBMx`u$71DC{Kt+& zhctc+|1l#;D~@-J1UGd6CSp4hU0dTn#bzWI#VL-F;Gp~^jvmRXqm1Me#oEkT!oC!Y zWU9CYnvr}Ze(#z7E4a-wySUx6<63sJ6Pl6q6n8uF0~+#PY)4X6{so(n)DsUmMuKlO z!6Vp?;~eq$u36L_8`J!dd8 zD4>)XJ&TH&J@c<;Ls?)LIuhiRvtyewnfwSgDbtIOI`SZn9 z&W`O!lF5%?Gm`Y;qmGf_whq8!*pB41`~)^5`CBaL$Ty40PvPj1Bss}QTFoa`HP$lU z)^pe$#Tw9zDNglVC{FiWDbDoF^*y_p4b4ajieEYMR(5#-wj;T_6)(nSBq_AK)RDKc zYk38>Bl$@qTaC>~{?PI|M;_s5`5SCUvOwO1%}7>>TO4_WBmaP-M^f-KBdNTQSm#+w z_*)~XEna|TB#p&Oo~^~po}I)io~wRfH&>w<$!76}V>e$ZU z;x=3hn;F~`-*Du)SDsRFjQd)6~ zBM*Nyksq*)lvm!4O{AyApB#CvOa2)@7^%QnA{|wi7g#YF&WM*h-~61*U4~)Pk)XEx zFScFQP+Qlr>9V1C%aKXScd_lVlpNF1c4;0XT~rsBwA(B!m@YnD0<(Ee7jt<2^aWda z1lp!nsi{Y?ZEBkQ7&c8U5T9_21QX?g*f!N)ehQn>jS!1CMuKWFVTMuM_(b8I6& z@g;7BP2{3t8%MsdSZI(+TN-dTY$KnN-^1p9?ULBbkr!I!J~;Y* zEz@~Ma!9eJvXB!T7n&292M>0xYkIhIXiQhW%G@!g0+mUpTw_-Dr_rz_Ed=^sPful!~ z|1U<8WGS&Ov6gv*9wR+0UWR5QnZ+xfxx}lU`Niv=WoEFOo6wA;qIk!Ve{kgc*p4KZ z{7@%1l7eEKBaa{C6xfa=)pVQ+n~|i@avH}-5ToVv*pB3!CY%YIkz5tCIPy7VIXjLX zNy!V0Nd4QmX`(Z*9myZ^Y-~pIkNA~iBsd~3z;+~C<;B>H^h17VCNLy~S=CKr@m}w_#&PKC1W{ z?`dd??MQx?TVOMi^}2Lx$4D?+Zj0?m#>gG88OeTKx|3rh7_8+k*p8%={4O>l=_U4X zOTl866cB$*ZK3)T`+Ya}zosnCq%?fE>tHr;crR%d#CC(ic#_71z53(ZKj zi}M{L!E$*Kwj;?de~ryZ@`=kG`K|zY6}BU}sR^&eW+X|qyup$0Wzh0QY)5iX{tlaw zoD{!z&M$HdE?XT>X?m&L1|cki*A>(GoO z#eI0ok-u!Ud>7l19Fb$*aU=OdOyU>`vfjnXupP-may&L8d9DiAl7}55L9Cn>+mW2A zj5A;}lD{;;%#M-Z7db1A9?7%+GLl=0Rf@IDfvzRH?!nT~jO3tL#`CyX*7KZL&U0}L zZ?ts0*xZo^8geTfJ(9SqjO2=94Q0*D;Ep)lb3jGjhd2^unwgS;#ocFh zv|l|COIu^0nZXHhykjKTAy3411}o%Gv6;a}af%~vZk4~pb_Q)V!s*z|;D}~0%P|sc zmFMDc2KEo(gNl?!U2b8;M9Lz5@7ew+?{e7&GnZ1NN42`$ug*!rR(C=ZsnQ$tu-lP0 z;cIy>wvmR&zhDz-ta!+gce*}=k6;_=h9VxrCQ=eDpK#>KPc5Iu4@R1IjY#L!Wo#E0 z>0dF4XQA>$ii4StD$-r8Cikna$FbFTXd*QcA9m!sY+$kwOY=v zKA)Vez6?#I3gWAdeC9x|gl(jcm7yv&k*10@9C_!M{5rOgy2*90iPTT5?-&W%%8l@Y zk&@mZQXX~LgB26$NwJsbn1--744dZlAa&Uf+b-Xd2V&FZTRQt-M~;&`6x%Lq>g*$M z*rj>El;tK}1lsL%UGTOZFg-8Mgr=$IV&QDhvf^CNisC%aO!e8v0%+!3q5)j&$eR|m zycF96SL)#v*d(|ou6E>Oi1IpY6YP<{!Dh}!#Z8WUDXzQ)hjWeuOXMH0xszKbZg-3X z<28?;aP*zrleZX2EycRbT9%a>Nkj1pG$XmZOmC9*JXnZ(%j=%U#hacT8?u|*(2S&~ zc+Zhn9Oc-qek5ZwvZUCIlbjlxk@OPNIr5F*az<=NQcX_4W+e5+ zY>s>*xSSJ5kEHZ%MsiNE%CMHuSN{~oJq61`Gm<%aFKao^CF0ATYs3nk^&7LB*Pt0m zOR=&eZ@81IVS6npA=kuaB<020jvRJPur9VESt2*UW+dyx#*Ta!vfLEgk$fb#z-Anwdc}v5;pw@oCRJ&Dl^97>4G`EkBEG$|Z6lHYwMM z&pC4CmP=uq@+0{LY*J1Z%Q|x9mdj(CGL2?j0fz_PJ$1TBDY~l9mMobRy~Wm^-?Zd{ zZJ=#?ncN=Rwm+9UV$=3q@f}C*=+#FzY}-C6zlX!N%|BI%_vvD=b~~B{)5U0UjAv{s zE;bI@F0N@eA7k6a@A4#Ux;QU>=E$oM@)y{4@uNHqKhVX9m?XTd|Ls=%JH>+O;$R$I zto1xDuJ=4AegiYj)tgtYh#UQCnYQd>Gqf!il(*ur7Xy*vZ%=F~J>;CilB;tZ~U;9?y-%xx;+S zGtg>2XvX@ynBT9)Enrs#p&jexdH5-8#(GQNv{uBC=T5ZzEVg6aEhl0#*2Cg+j=Z5& zE`{w_*T^qmJJuO;S!~9-NG$Id2`0%EupR3txgxe>eN#uV3N~YHCsudlB_6pJwqva* zzk&b%v6f82SYOs?K49HkTmKb@c-|FgLW|h;NWVI0Ash|uSl^b%Vl&nr z;si%NV+9 z%Zsrc>l5-)Y{pttT;a%VLtc&TSkuYt@c%#7pOZ4yw3^g;*3DS6iWfZdh?hK{6fb)Q z;uUDGyy8{A`t1_-d>z^;eoge@;lfZmYrfZ$4IbJeh=F#|5UjbHiu=t*vByvbY6=4 zV|!Ry$%C*xEY;;9*c_Gy;xI?P0Z1N+?O`b?e}wH}d0ZZc&0#4be(cD5_T)*}9+oun zXV@N=Uv#DU0-M8fT%6_@3AW2K@&9#L?kDH4tkNtGa}IM@Hi}0*e-w{-?iG)F9uZGM zb6B$L>Acf^wdX4K{Rgy%rGi*uO6@|0NHGf}ML`GQ!_vx3+F zn!{3EY~)vCZ?f+u&>oiaH*hm-4$C#MrDG)cU49GO!!l|OZimfbnIyjL$g90_XKWA4 zdvaH74@)z-J2r=_TbJuKyPow|+9VM(v$dyf2Uik4%0_`~wFoD|!` zl0{CA&0)zargY?$O*u9GzYfcH4|7;LX_nh!s4Ci?4Z(7b`(?Sf+?o z{OYiK?7JGYhvn6~xF$A-rLUH2JMz|ME!V~Nu;iB;U~^cW6&pM9c2l`2wudFX+ydLf za{CT$jm=?6rscMdygzL$Pj_{|_OP7N**jr-SeEKa(*>KuvO#>;F%ry?dtiHOnIgZB z?O_=r_r>P0j1>ns@&#=22l)RwEQeEbSY~OKYdMEGEO*59o^e&-H_!||jkwXTHjd$| zfi^=oczG)}gRdoSb7b)H4r~YihYrjxYzMF9J&wG#uI2sM4*qBPAhv^FD<8&Y@LR>- z9C_otd>q@s&y-JLJNUQ>9GE|FIQaklNmWcAQV+5yY1*D{ERTxmJqwB%J)d}p&ND+h zhjemQZ03+d%;CsqujE|V&f!)p&V$1_@DG;;@i-2H2NT5nj(q#J{3Nz>=qf*r!#VIR zVe&IL4DNyzYn_%@&#LhnteK;|O+Wrz%d?bLYr_n~^w;)@By6Y-3}Xcs#QKhWnXB9g zhbbdLO~rZ>hp~c2Vsl6S!jM~GoAP-m$ zbEL9~GaUH@sXQCoBXvU)`wE9g%KiBslb(z<)b=)(OsM+ecF*SGPR~in+0HI#uW!qy zav1kuo8qui?Z+m?8S$Va?;Vj3W1C`){2MkYwur|adGCmP3O{&YmaFOZYU@5Lrs-~C zY%j+?ViM2GYB~#NwWn>+`k#B|J-1Vl$!T7bMjZ%HodqqyIFuu)BCi%*pbirsOhEHHr-WTflbrH#MO@c@UFZL zKiKrpOf)@QZ5?36G+ntmSC2!UwZ+4pOG>htqtG^8p(;)Oj&0M;OR#L-R-*h5ez56#YWnXNXgc-#uIa?{TmjO0W-P_!(nH(jeRZ7) z+b$2tS+MEyyqMjQXCCE8aM-2pwThj{%uau9$mvCOzCnClOYo~0Kr^_LVxs3?VsX#o zrC|vewiH|ypLgVqHgXwkJDe%MgiVL5#g`p<2}XVu+c`!QxDqyVjH%91sp`n3lXx?A3wK*q^s7;G1o5~eHTda)Zc87tQ0+R)vzme|8HeOWf!3!04i#6FI^ z)9^*yAKQ%kZCSz&wBS)?)@;GcW#>gMzsEl7_A!C)7 z3ALQ1gqF(KR9p#7#!s4X!PTBq#kHP8%ER^0WSlI1>lg{T$eXdvSV`WBO~xkTHb*`i zE$_fKV{MIW7d9E+6!$ptx{wVtJkoPi6;?+>lW~$b z){!Ss>z)FO~&`c$&S2bUj7{0jFsi7*kr6D&T!<#B8^}+wi!>!U*V{XZE}!t zx!T^wQbI{(JSA?2CS%GX7n6)7G{Pfa^X*DDyt)3hob=AWWQo@d1-o;}X7pQg~vVC`gf)54K2NY!#{Y-jM2+!mV|)D=58 z@|k0~6Sgymk-K0sg9PziN8aT8C+>mm49>~#6eV4 z2)2=P{muHb*hDTUCOYy~UHLg|BcHs4OJNiFy7+=)B-kaF#WwP6xjZ&E-?d@|$4D?v zu85;=zE$%ulB|l=fwhD!daF+!u_H7ic~b1`8HimxpBKA%CcVaPxsMPc{H{onI(_Kb|m5iM}8$r z{sc#lq-kD8^0H#BWi6qv-ZofOTo27iQhyA;@k|gmdgc~4dk(z8Zni)(l2PIhj{N+t zydB$-G?RbAW+WZNpB;I@L*9q&NZ!zd4`4HrcV;lqUmf|bLoFZ0b|jM@rnld*8Oe)U zKIzEar+fxSkEH8kjHG~K#rI<*=O5OcgP021I|nhf=Z~?xi8rlhIjyGmY

^WQ1lU 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�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

l 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 z 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

8ql> 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

  • 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

    )E>OEY-MCs&Nns9jOyrCFN3$H+41klWOcA_=JuU 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Μb9*3v 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
    DIH2wN596?H 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

  • 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ë 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�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ⅆuMspE-J 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%0DMNT-zxJ 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%0ANaWU8i$rdnwMgXF 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

    y4B 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�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%0Df)$e)Y3O&wU)LDj$asQI~KF*nmVZ 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%0A=Uj?T#EOe&ZEse?( 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