| author | |
| committer | |
| log | a31a749c42505e53308c0f2426db283ea130e776 |
| tree | 06030cf2b8fbd1fe4204d9e95662e5c2b601f50a |
| parent | 0e6d2184cacf2dd1fad7508b2f9ae99d78763148 |
15 files changed, 380 insertions(+), 31 deletions(-)
CMakeLists.txt+31| ... | @@ -142,15 +142,19 @@ include_directories(${CLANG_INCLUDE_DIRS}) | ... | @@ -142,15 +142,19 @@ include_directories(${CLANG_INCLUDE_DIRS}) |
| 142 | # No patches have been applied to SoftFloat-3e | 142 | # No patches have been applied to SoftFloat-3e |
| 143 | set(EMBEDDED_SOFTFLOAT_SOURCES | 143 | set(EMBEDDED_SOFTFLOAT_SOURCES |
| 144 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c" | 144 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/f128M_isSignalingNaN.c" |
| 145 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/extF80M_isSignalingNaN.c" | ||
| 145 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF128M.c" | 146 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF128M.c" |
| 147 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToExtF80M.c" | ||
| 146 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c" | 148 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF16UI.c" |
| 147 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c" | 149 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF32UI.c" |
| 148 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c" | 150 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_commonNaNToF64UI.c" |
| 149 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c" | 151 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f128MToCommonNaN.c" |
| 152 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_extF80MToCommonNaN.c" | ||
| 150 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c" | 153 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f16UIToCommonNaN.c" |
| 151 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c" | 154 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f32UIToCommonNaN.c" |
| 152 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c" | 155 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_f64UIToCommonNaN.c" |
| 153 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF128M.c" | 156 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF128M.c" |
| 157 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNExtF80M.c" | ||
| 154 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c" | 158 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/s_propagateNaNF16UI.c" |
| 155 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/softfloat_raiseFlags.c" | 159 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/8086/softfloat_raiseFlags.c" |
| 156 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_add.c" | 160 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_add.c" |
| ... | @@ -170,6 +174,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -170,6 +174,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 170 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f16.c" | 174 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f16.c" |
| 171 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f32.c" | 175 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f32.c" |
| 172 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f64.c" | 176 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_f64.c" |
| 177 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_extF80M.c" | ||
| 173 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32.c" | 178 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32.c" |
| 174 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32_r_minMag.c" | 179 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i32_r_minMag.c" |
| 175 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i64.c" | 180 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_i64.c" |
| ... | @@ -178,6 +183,20 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -178,6 +183,20 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 178 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c" | 183 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui32_r_minMag.c" |
| 179 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64.c" | 184 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64.c" |
| 180 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c" | 185 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_to_ui64_r_minMag.c" |
| 186 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_add.c" | ||
| 187 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_div.c" | ||
| 188 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_eq.c" | ||
| 189 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_le.c" | ||
| 190 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_lt.c" | ||
| 191 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_mul.c" | ||
| 192 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_rem.c" | ||
| 193 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_roundToInt.c" | ||
| 194 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_sqrt.c" | ||
| 195 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_sub.c" | ||
| 196 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_to_f16.c" | ||
| 197 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_to_f32.c" | ||
| 198 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_to_f64.c" | ||
| 199 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/extF80M_to_f128M.c" | ||
| 181 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_add.c" | 200 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_add.c" |
| 182 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_div.c" | 201 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_div.c" |
| 183 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_eq.c" | 202 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_eq.c" |
| ... | @@ -188,9 +207,12 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -188,9 +207,12 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 188 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_roundToInt.c" | 207 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_roundToInt.c" |
| 189 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sqrt.c" | 208 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sqrt.c" |
| 190 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sub.c" | 209 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_sub.c" |
| 210 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_extF80M.c" | ||
| 191 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f128M.c" | 211 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f128M.c" |
| 192 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f64.c" | 212 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_to_f64.c" |
| 213 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f32_to_extF80M.c" | ||
| 193 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f32_to_f128M.c" | 214 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f32_to_f128M.c" |
| 215 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_extF80M.c" | ||
| 194 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f128M.c" | 216 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f128M.c" |
| 195 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f16.c" | 217 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f64_to_f16.c" |
| 196 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/i32_to_f128M.c" | 218 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/i32_to_f128M.c" |
| ... | @@ -198,6 +220,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -198,6 +220,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 198 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addCarryM.c" | 220 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addCarryM.c" |
| 199 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addComplCarryM.c" | 221 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addComplCarryM.c" |
| 200 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addF128M.c" | 222 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addF128M.c" |
| 223 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addExtF80M.c" | ||
| 201 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addM.c" | 224 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addM.c" |
| 202 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF16.c" | 225 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF16.c" |
| 203 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF32.c" | 226 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_addMagsF32.c" |
| ... | @@ -208,12 +231,14 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -208,12 +231,14 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 208 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecip_1Ks.c" | 231 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_approxRecip_1Ks.c" |
| 209 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare128M.c" | 232 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare128M.c" |
| 210 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare96M.c" | 233 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compare96M.c" |
| 234 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_compareNonnormExtF80M.c" | ||
| 211 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros16.c" | 235 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros16.c" |
| 212 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros32.c" | 236 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros32.c" |
| 213 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros64.c" | 237 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros64.c" |
| 214 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros8.c" | 238 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_countLeadingZeros8.c" |
| 215 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_eq128.c" | 239 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_eq128.c" |
| 216 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_invalidF128M.c" | 240 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_invalidF128M.c" |
| 241 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_invalidExtF80M.c" | ||
| 217 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_isNaNF128M.c" | 242 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_isNaNF128M.c" |
| 218 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_le128.c" | 243 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_le128.c" |
| 219 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_lt128.c" | 244 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_lt128.c" |
| ... | @@ -224,7 +249,9 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -224,7 +249,9 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 224 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF32.c" | 249 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF32.c" |
| 225 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF64.c" | 250 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_mulAddF64.c" |
| 226 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_negXM.c" | 251 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_negXM.c" |
| 252 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normExtF80SigM.c" | ||
| 227 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackMToF128M.c" | 253 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackMToF128M.c" |
| 254 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackMToExtF80M.c" | ||
| 228 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF16.c" | 255 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF16.c" |
| 229 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF32.c" | 256 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF32.c" |
| 230 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF64.c" | 257 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_normRoundPackToF64.c" |
| ... | @@ -235,6 +262,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -235,6 +262,7 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 235 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_remStepMBy32.c" | 262 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_remStepMBy32.c" |
| 236 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToI64.c" | 263 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToI64.c" |
| 237 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToUI64.c" | 264 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundMToUI64.c" |
| 265 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackMToExtF80M.c" | ||
| 238 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackMToF128M.c" | 266 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackMToF128M.c" |
| 239 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF16.c" | 267 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF16.c" |
| 240 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF32.c" | 268 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_roundPackToF32.c" |
| ... | @@ -263,11 +291,14 @@ set(EMBEDDED_SOFTFLOAT_SOURCES | ... | @@ -263,11 +291,14 @@ set(EMBEDDED_SOFTFLOAT_SOURCES |
| 263 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF32.c" | 291 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF32.c" |
| 264 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF64.c" | 292 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_subMagsF64.c" |
| 265 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_tryPropagateNaNF128M.c" | 293 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_tryPropagateNaNF128M.c" |
| 294 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/s_tryPropagateNaNExtF80M.c" | ||
| 266 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_mulAdd.c" | 295 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f16_mulAdd.c" |
| 267 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_mulAdd.c" | 296 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/f128M_mulAdd.c" |
| 268 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/softfloat_state.c" | 297 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/softfloat_state.c" |
| 269 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui32_to_f128M.c" | 298 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui32_to_f128M.c" |
| 270 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui64_to_f128M.c" | 299 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui64_to_f128M.c" |
| 300 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui32_to_extF80M.c" | ||
| 301 | "${CMAKE_SOURCE_DIR}/deps/SoftFloat-3e/source/ui64_to_extF80M.c" | ||
| 271 | ) | 302 | ) |
| 272 | add_library(embedded_softfloat STATIC ${EMBEDDED_SOFTFLOAT_SOURCES}) | 303 | add_library(embedded_softfloat STATIC ${EMBEDDED_SOFTFLOAT_SOURCES}) |
| 273 | if(MSVC) | 304 | if(MSVC) |
src/AstGen.zig+2| ... | @@ -7723,6 +7723,7 @@ const primitives = std.ComptimeStringMap(Zir.Inst.Ref, .{ | ... | @@ -7723,6 +7723,7 @@ const primitives = std.ComptimeStringMap(Zir.Inst.Ref, .{ |
| 7723 | .{ "f16", .f16_type }, | 7723 | .{ "f16", .f16_type }, |
| 7724 | .{ "f32", .f32_type }, | 7724 | .{ "f32", .f32_type }, |
| 7725 | .{ "f64", .f64_type }, | 7725 | .{ "f64", .f64_type }, |
| 7726 | .{ "f80", .f80_type }, | ||
| 7726 | .{ "false", .bool_false }, | 7727 | .{ "false", .bool_false }, |
| 7727 | .{ "i16", .i16_type }, | 7728 | .{ "i16", .i16_type }, |
| 7728 | .{ "i32", .i32_type }, | 7729 | .{ "i32", .i32_type }, |
| ... | @@ -8732,6 +8733,7 @@ fn rvalue( | ... | @@ -8732,6 +8733,7 @@ fn rvalue( |
| 8732 | as_ty | @enumToInt(Zir.Inst.Ref.f16_type), | 8733 | as_ty | @enumToInt(Zir.Inst.Ref.f16_type), |
| 8733 | as_ty | @enumToInt(Zir.Inst.Ref.f32_type), | 8734 | as_ty | @enumToInt(Zir.Inst.Ref.f32_type), |
| 8734 | as_ty | @enumToInt(Zir.Inst.Ref.f64_type), | 8735 | as_ty | @enumToInt(Zir.Inst.Ref.f64_type), |
| 8736 | as_ty | @enumToInt(Zir.Inst.Ref.f80_type), | ||
| 8735 | as_ty | @enumToInt(Zir.Inst.Ref.f128_type), | 8737 | as_ty | @enumToInt(Zir.Inst.Ref.f128_type), |
| 8736 | as_ty | @enumToInt(Zir.Inst.Ref.anyopaque_type), | 8738 | as_ty | @enumToInt(Zir.Inst.Ref.anyopaque_type), |
| 8737 | as_ty | @enumToInt(Zir.Inst.Ref.bool_type), | 8739 | as_ty | @enumToInt(Zir.Inst.Ref.bool_type), |
src/Sema.zig+3| ... | @@ -16950,6 +16950,7 @@ pub fn typeHasOnePossibleValue( | ... | @@ -16950,6 +16950,7 @@ pub fn typeHasOnePossibleValue( |
| 16950 | .f16, | 16950 | .f16, |
| 16951 | .f32, | 16951 | .f32, |
| 16952 | .f64, | 16952 | .f64, |
| 16953 | .f80, | ||
| 16953 | .f128, | 16954 | .f128, |
| 16954 | .c_longdouble, | 16955 | .c_longdouble, |
| 16955 | .comptime_int, | 16956 | .comptime_int, |
| ... | @@ -17227,6 +17228,7 @@ pub fn addType(sema: *Sema, ty: Type) !Air.Inst.Ref { | ... | @@ -17227,6 +17228,7 @@ pub fn addType(sema: *Sema, ty: Type) !Air.Inst.Ref { |
| 17227 | .f16 => return .f16_type, | 17228 | .f16 => return .f16_type, |
| 17228 | .f32 => return .f32_type, | 17229 | .f32 => return .f32_type, |
| 17229 | .f64 => return .f64_type, | 17230 | .f64 => return .f64_type, |
| 17231 | .f80 => return .f80_type, | ||
| 17230 | .f128 => return .f128_type, | 17232 | .f128 => return .f128_type, |
| 17231 | .anyopaque => return .anyopaque_type, | 17233 | .anyopaque => return .anyopaque_type, |
| 17232 | .bool => return .bool_type, | 17234 | .bool => return .bool_type, |
| ... | @@ -17572,6 +17574,7 @@ fn typeRequiresComptime(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) C | ... | @@ -17572,6 +17574,7 @@ fn typeRequiresComptime(sema: *Sema, block: *Block, src: LazySrcLoc, ty: Type) C |
| 17572 | .f16, | 17574 | .f16, |
| 17573 | .f32, | 17575 | .f32, |
| 17574 | .f64, | 17576 | .f64, |
| 17577 | .f80, | ||
| 17575 | .f128, | 17578 | .f128, |
| 17576 | .anyopaque, | 17579 | .anyopaque, |
| 17577 | .bool, | 17580 | .bool, |
src/Zir.zig+5| ... | @@ -1639,6 +1639,7 @@ pub const Inst = struct { | ... | @@ -1639,6 +1639,7 @@ pub const Inst = struct { |
| 1639 | f16_type, | 1639 | f16_type, |
| 1640 | f32_type, | 1640 | f32_type, |
| 1641 | f64_type, | 1641 | f64_type, |
| 1642 | f80_type, | ||
| 1642 | f128_type, | 1643 | f128_type, |
| 1643 | anyopaque_type, | 1644 | anyopaque_type, |
| 1644 | bool_type, | 1645 | bool_type, |
| ... | @@ -1809,6 +1810,10 @@ pub const Inst = struct { | ... | @@ -1809,6 +1810,10 @@ pub const Inst = struct { |
| 1809 | .ty = Type.initTag(.type), | 1810 | .ty = Type.initTag(.type), |
| 1810 | .val = Value.initTag(.f64_type), | 1811 | .val = Value.initTag(.f64_type), |
| 1811 | }, | 1812 | }, |
| 1813 | .f80_type = .{ | ||
| 1814 | .ty = Type.initTag(.type), | ||
| 1815 | .val = Value.initTag(.f80_type), | ||
| 1816 | }, | ||
| 1812 | .f128_type = .{ | 1817 | .f128_type = .{ |
| 1813 | .ty = Type.initTag(.type), | 1818 | .ty = Type.initTag(.type), |
| 1814 | .val = Value.initTag(.f128_type), | 1819 | .val = Value.initTag(.f128_type), |
src/stage1/all_types.hpp+2| ... | @@ -516,6 +516,7 @@ struct ZigValue { | ... | @@ -516,6 +516,7 @@ struct ZigValue { |
| 516 | float16_t x_f16; | 516 | float16_t x_f16; |
| 517 | float x_f32; | 517 | float x_f32; |
| 518 | double x_f64; | 518 | double x_f64; |
| 519 | extFloat80_t x_f80; | ||
| 519 | float128_t x_f128; | 520 | float128_t x_f128; |
| 520 | bool x_bool; | 521 | bool x_bool; |
| 521 | ConstBoundFnValue x_bound_fn; | 522 | ConstBoundFnValue x_bound_fn; |
| ... | @@ -2089,6 +2090,7 @@ struct CodeGen { | ... | @@ -2089,6 +2090,7 @@ struct CodeGen { |
| 2089 | ZigType *entry_f16; | 2090 | ZigType *entry_f16; |
| 2090 | ZigType *entry_f32; | 2091 | ZigType *entry_f32; |
| 2091 | ZigType *entry_f64; | 2092 | ZigType *entry_f64; |
| 2093 | ZigType *entry_f80; | ||
| 2092 | ZigType *entry_f128; | 2094 | ZigType *entry_f128; |
| 2093 | ZigType *entry_void; | 2095 | ZigType *entry_void; |
| 2094 | ZigType *entry_unreachable; | 2096 | ZigType *entry_unreachable; |
src/stage1/analyze.cpp+13| ... | @@ -5647,6 +5647,9 @@ static uint32_t hash_combine_const_val(uint32_t hash_val, ZigValue *const_val) { | ... | @@ -5647,6 +5647,9 @@ static uint32_t hash_combine_const_val(uint32_t hash_val, ZigValue *const_val) { |
| 5647 | case 16: return hash_combine(hash_val, &const_val->data.x_f16); | 5647 | case 16: return hash_combine(hash_val, &const_val->data.x_f16); |
| 5648 | case 32: return hash_combine(hash_val, &const_val->data.x_f32); | 5648 | case 32: return hash_combine(hash_val, &const_val->data.x_f32); |
| 5649 | case 64: return hash_combine(hash_val, &const_val->data.x_f64); | 5649 | case 64: return hash_combine(hash_val, &const_val->data.x_f64); |
| 5650 | case 80: | ||
| 5651 | hash_val = hash_combine(hash_val, &const_val->data.x_f80.signExp); | ||
| 5652 | return hash_combine(hash_val, &const_val->data.x_f80.signif); | ||
| 5650 | case 128: return hash_combine(hash_val, &const_val->data.x_f128); | 5653 | case 128: return hash_combine(hash_val, &const_val->data.x_f128); |
| 5651 | default: zig_unreachable(); | 5654 | default: zig_unreachable(); |
| 5652 | } | 5655 | } |
| ... | @@ -6325,6 +6328,7 @@ void init_const_float(ZigValue *const_val, ZigType *type, double value) { | ... | @@ -6325,6 +6328,7 @@ void init_const_float(ZigValue *const_val, ZigType *type, double value) { |
| 6325 | case 64: | 6328 | case 64: |
| 6326 | const_val->data.x_f64 = value; | 6329 | const_val->data.x_f64 = value; |
| 6327 | break; | 6330 | break; |
| 6331 | case 80: | ||
| 6328 | case 128: | 6332 | case 128: |
| 6329 | // if we need this, we should add a function that accepts a float128_t param | 6333 | // if we need this, we should add a function that accepts a float128_t param |
| 6330 | zig_unreachable(); | 6334 | zig_unreachable(); |
| ... | @@ -7218,6 +7222,8 @@ bool const_values_equal(CodeGen *g, ZigValue *a, ZigValue *b) { | ... | @@ -7218,6 +7222,8 @@ bool const_values_equal(CodeGen *g, ZigValue *a, ZigValue *b) { |
| 7218 | return a->data.x_f32 == b->data.x_f32; | 7222 | return a->data.x_f32 == b->data.x_f32; |
| 7219 | case 64: | 7223 | case 64: |
| 7220 | return a->data.x_f64 == b->data.x_f64; | 7224 | return a->data.x_f64 == b->data.x_f64; |
| 7225 | case 80: | ||
| 7226 | return extF80M_eq(&a->data.x_f80, &b->data.x_f80); | ||
| 7221 | case 128: | 7227 | case 128: |
| 7222 | return f128M_eq(&a->data.x_f128, &b->data.x_f128); | 7228 | return f128M_eq(&a->data.x_f128, &b->data.x_f128); |
| 7223 | default: | 7229 | default: |
| ... | @@ -7470,6 +7476,13 @@ void render_const_value(CodeGen *g, Buf *buf, ZigValue *const_val) { | ... | @@ -7470,6 +7476,13 @@ void render_const_value(CodeGen *g, Buf *buf, ZigValue *const_val) { |
| 7470 | case 64: | 7476 | case 64: |
| 7471 | buf_appendf(buf, "%f", const_val->data.x_f64); | 7477 | buf_appendf(buf, "%f", const_val->data.x_f64); |
| 7472 | return; | 7478 | return; |
| 7479 | case 80: { | ||
| 7480 | float64_t f64_value = extF80M_to_f64(&const_val->data.x_f80); | ||
| 7481 | double double_value; | ||
| 7482 | memcpy(&double_value, &f64_value, sizeof(double)); | ||
| 7483 | buf_appendf(buf, "%f", double_value); | ||
| 7484 | return; | ||
| 7485 | } | ||
| 7473 | case 128: | 7486 | case 128: |
| 7474 | { | 7487 | { |
| 7475 | const size_t extra_len = 100; | 7488 | const size_t extra_len = 100; |
src/stage1/codegen.cpp+13| ... | @@ -7692,6 +7692,12 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n | ... | @@ -7692,6 +7692,12 @@ static LLVMValueRef gen_const_val(CodeGen *g, ZigValue *const_val, const char *n |
| 7692 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f32); | 7692 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f32); |
| 7693 | case 64: | 7693 | case 64: |
| 7694 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f64); | 7694 | return LLVMConstReal(get_llvm_type(g, type_entry), const_val->data.x_f64); |
| 7695 | case 80: { | ||
| 7696 | uint64_t buf[2]; | ||
| 7697 | memcpy(&buf, &const_val->data.x_f80, 16); | ||
| 7698 | LLVMValueRef as_int = LLVMConstIntOfArbitraryPrecision(LLVMInt128Type(), 2, buf); | ||
| 7699 | return LLVMConstBitCast(as_int, get_llvm_type(g, type_entry)); | ||
| 7700 | } | ||
| 7695 | case 128: | 7701 | case 128: |
| 7696 | { | 7702 | { |
| 7697 | uint64_t buf[2]; | 7703 | uint64_t buf[2]; |
| ... | @@ -8911,6 +8917,13 @@ static void define_builtin_types(CodeGen *g) { | ... | @@ -8911,6 +8917,13 @@ static void define_builtin_types(CodeGen *g) { |
| 8911 | add_fp_entry(g, "f64", 64, LLVMDoubleType(), &g->builtin_types.entry_f64); | 8917 | add_fp_entry(g, "f64", 64, LLVMDoubleType(), &g->builtin_types.entry_f64); |
| 8912 | add_fp_entry(g, "f128", 128, LLVMFP128Type(), &g->builtin_types.entry_f128); | 8918 | add_fp_entry(g, "f128", 128, LLVMFP128Type(), &g->builtin_types.entry_f128); |
| 8913 | 8919 | ||
| 8920 | if (target_has_f80(g->zig_target)) { | ||
| 8921 | add_fp_entry(g, "f80", 80, LLVMX86FP80Type(), &g->builtin_types.entry_f80); | ||
| 8922 | } else { | ||
| 8923 | // use f128 for correct size and alignment | ||
| 8924 | add_fp_entry(g, "f80", 128, LLVMFP128Type(), &g->builtin_types.entry_f80); | ||
| 8925 | } | ||
| 8926 | |||
| 8914 | switch (g->zig_target->arch) { | 8927 | switch (g->zig_target->arch) { |
| 8915 | case ZigLLVM_x86: | 8928 | case ZigLLVM_x86: |
| 8916 | case ZigLLVM_x86_64: | 8929 | case ZigLLVM_x86_64: |
src/stage1/ir.cpp+239-23| ... | @@ -2688,6 +2688,12 @@ static bool float_has_fraction(ZigValue *const_val) { | ... | @@ -2688,6 +2688,12 @@ static bool float_has_fraction(ZigValue *const_val) { |
| 2688 | return floorf(const_val->data.x_f32) != const_val->data.x_f32; | 2688 | return floorf(const_val->data.x_f32) != const_val->data.x_f32; |
| 2689 | case 64: | 2689 | case 64: |
| 2690 | return floor(const_val->data.x_f64) != const_val->data.x_f64; | 2690 | return floor(const_val->data.x_f64) != const_val->data.x_f64; |
| 2691 | case 80: | ||
| 2692 | { | ||
| 2693 | extFloat80_t floored; | ||
| 2694 | extF80M_roundToInt(&const_val->data.x_f80, softfloat_round_minMag, false, &floored); | ||
| 2695 | return !extF80M_eq(&floored, &const_val->data.x_f80); | ||
| 2696 | } | ||
| 2691 | case 128: | 2697 | case 128: |
| 2692 | { | 2698 | { |
| 2693 | float128_t floored; | 2699 | float128_t floored; |
| ... | @@ -2716,6 +2722,15 @@ static void float_append_buf(Buf *buf, ZigValue *const_val) { | ... | @@ -2716,6 +2722,15 @@ static void float_append_buf(Buf *buf, ZigValue *const_val) { |
| 2716 | case 64: | 2722 | case 64: |
| 2717 | buf_appendf(buf, "%f", const_val->data.x_f64); | 2723 | buf_appendf(buf, "%f", const_val->data.x_f64); |
| 2718 | break; | 2724 | break; |
| 2725 | case 80: | ||
| 2726 | { | ||
| 2727 | float64_t f64_value = extF80M_to_f64(&const_val->data.x_f80); | ||
| 2728 | double double_value; | ||
| 2729 | memcpy(&double_value, &f64_value, sizeof(double)); | ||
| 2730 | |||
| 2731 | buf_appendf(buf, "%f", const_val->data.x_f64); | ||
| 2732 | break; | ||
| 2733 | } | ||
| 2719 | case 128: | 2734 | case 128: |
| 2720 | { | 2735 | { |
| 2721 | // TODO actual implementation | 2736 | // TODO actual implementation |
| ... | @@ -2772,6 +2787,15 @@ static void float_init_bigint(BigInt *bigint, ZigValue *const_val) { | ... | @@ -2772,6 +2787,15 @@ static void float_init_bigint(BigInt *bigint, ZigValue *const_val) { |
| 2772 | bigint->is_negative = true; | 2787 | bigint->is_negative = true; |
| 2773 | } | 2788 | } |
| 2774 | break; | 2789 | break; |
| 2790 | case 80: | ||
| 2791 | { | ||
| 2792 | float128_t f128_value; | ||
| 2793 | extF80M_to_f128M(&const_val->data.x_f80, &f128_value); | ||
| 2794 | BigFloat tmp_float; | ||
| 2795 | bigfloat_init_128(&tmp_float, f128_value); | ||
| 2796 | bigint_init_bigfloat(bigint, &tmp_float); | ||
| 2797 | } | ||
| 2798 | break; | ||
| 2775 | case 128: | 2799 | case 128: |
| 2776 | { | 2800 | { |
| 2777 | BigFloat tmp_float; | 2801 | BigFloat tmp_float; |
| ... | @@ -2801,8 +2825,11 @@ static void float_init_bigfloat(ZigValue *dest_val, BigFloat *bigfloat) { | ... | @@ -2801,8 +2825,11 @@ static void float_init_bigfloat(ZigValue *dest_val, BigFloat *bigfloat) { |
| 2801 | case 64: | 2825 | case 64: |
| 2802 | dest_val->data.x_f64 = bigfloat_to_f64(bigfloat); | 2826 | dest_val->data.x_f64 = bigfloat_to_f64(bigfloat); |
| 2803 | break; | 2827 | break; |
| 2804 | case 80: | 2828 | case 80: { |
| 2805 | zig_panic("TODO: float_init_bigfloat c_longdouble"); | 2829 | float128_t f128_value = bigfloat_to_f128(bigfloat); |
| 2830 | f128M_to_extF80M(&f128_value, &dest_val->data.x_f80); | ||
| 2831 | break; | ||
| 2832 | } | ||
| 2806 | case 128: | 2833 | case 128: |
| 2807 | dest_val->data.x_f128 = bigfloat_to_f128(bigfloat); | 2834 | dest_val->data.x_f128 = bigfloat_to_f128(bigfloat); |
| 2808 | break; | 2835 | break; |
| ... | @@ -2828,6 +2855,9 @@ static void float_init_f16(ZigValue *dest_val, float16_t x) { | ... | @@ -2828,6 +2855,9 @@ static void float_init_f16(ZigValue *dest_val, float16_t x) { |
| 2828 | case 64: | 2855 | case 64: |
| 2829 | dest_val->data.x_f64 = zig_f16_to_double(x); | 2856 | dest_val->data.x_f64 = zig_f16_to_double(x); |
| 2830 | break; | 2857 | break; |
| 2858 | case 80: | ||
| 2859 | f16_to_extF80M(x, &dest_val->data.x_f80); | ||
| 2860 | break; | ||
| 2831 | case 128: | 2861 | case 128: |
| 2832 | f16_to_f128M(x, &dest_val->data.x_f128); | 2862 | f16_to_f128M(x, &dest_val->data.x_f128); |
| 2833 | break; | 2863 | break; |
| ... | @@ -2853,6 +2883,12 @@ static void float_init_f32(ZigValue *dest_val, float x) { | ... | @@ -2853,6 +2883,12 @@ static void float_init_f32(ZigValue *dest_val, float x) { |
| 2853 | case 64: | 2883 | case 64: |
| 2854 | dest_val->data.x_f64 = x; | 2884 | dest_val->data.x_f64 = x; |
| 2855 | break; | 2885 | break; |
| 2886 | case 80: { | ||
| 2887 | float32_t x_f32; | ||
| 2888 | memcpy(&x_f32, &x, sizeof(float)); | ||
| 2889 | f32_to_extF80M(x_f32, &dest_val->data.x_f80); | ||
| 2890 | break; | ||
| 2891 | } | ||
| 2856 | case 128: | 2892 | case 128: |
| 2857 | { | 2893 | { |
| 2858 | float32_t x_f32; | 2894 | float32_t x_f32; |
| ... | @@ -2882,6 +2918,12 @@ static void float_init_f64(ZigValue *dest_val, double x) { | ... | @@ -2882,6 +2918,12 @@ static void float_init_f64(ZigValue *dest_val, double x) { |
| 2882 | case 64: | 2918 | case 64: |
| 2883 | dest_val->data.x_f64 = x; | 2919 | dest_val->data.x_f64 = x; |
| 2884 | break; | 2920 | break; |
| 2921 | case 80: { | ||
| 2922 | float64_t x_f64; | ||
| 2923 | memcpy(&x_f64, &x, sizeof(double)); | ||
| 2924 | f64_to_extF80M(x_f64, &dest_val->data.x_f80); | ||
| 2925 | break; | ||
| 2926 | } | ||
| 2885 | case 128: | 2927 | case 128: |
| 2886 | { | 2928 | { |
| 2887 | float64_t x_f64; | 2929 | float64_t x_f64; |
| ... | @@ -2917,6 +2959,9 @@ static void float_init_f128(ZigValue *dest_val, float128_t x) { | ... | @@ -2917,6 +2959,9 @@ static void float_init_f128(ZigValue *dest_val, float128_t x) { |
| 2917 | memcpy(&dest_val->data.x_f64, &f64_val, sizeof(double)); | 2959 | memcpy(&dest_val->data.x_f64, &f64_val, sizeof(double)); |
| 2918 | break; | 2960 | break; |
| 2919 | } | 2961 | } |
| 2962 | case 80: | ||
| 2963 | f128M_to_extF80M(&x, &dest_val->data.x_f80); | ||
| 2964 | break; | ||
| 2920 | case 128: | 2965 | case 128: |
| 2921 | { | 2966 | { |
| 2922 | memcpy(&dest_val->data.x_f128, &x, sizeof(float128_t)); | 2967 | memcpy(&dest_val->data.x_f128, &x, sizeof(float128_t)); |
| ... | @@ -2944,6 +2989,12 @@ static void float_init_float(ZigValue *dest_val, ZigValue *src_val) { | ... | @@ -2944,6 +2989,12 @@ static void float_init_float(ZigValue *dest_val, ZigValue *src_val) { |
| 2944 | case 64: | 2989 | case 64: |
| 2945 | float_init_f64(dest_val, src_val->data.x_f64); | 2990 | float_init_f64(dest_val, src_val->data.x_f64); |
| 2946 | break; | 2991 | break; |
| 2992 | case 80: { | ||
| 2993 | float128_t f128_value; | ||
| 2994 | extF80M_to_f128M(&src_val->data.x_f80, &f128_value); | ||
| 2995 | float_init_f128(dest_val, f128_value); | ||
| 2996 | break; | ||
| 2997 | } | ||
| 2947 | case 128: | 2998 | case 128: |
| 2948 | float_init_f128(dest_val, src_val->data.x_f128); | 2999 | float_init_f128(dest_val, src_val->data.x_f128); |
| 2949 | break; | 3000 | break; |
| ... | @@ -2966,6 +3017,8 @@ static bool float_is_nan(ZigValue *op) { | ... | @@ -2966,6 +3017,8 @@ static bool float_is_nan(ZigValue *op) { |
| 2966 | return op->data.x_f32 != op->data.x_f32; | 3017 | return op->data.x_f32 != op->data.x_f32; |
| 2967 | case 64: | 3018 | case 64: |
| 2968 | return op->data.x_f64 != op->data.x_f64; | 3019 | return op->data.x_f64 != op->data.x_f64; |
| 3020 | case 80: | ||
| 3021 | return zig_extF80_isNaN(&op->data.x_f80); | ||
| 2969 | case 128: | 3022 | case 128: |
| 2970 | return zig_f128_isNaN(&op->data.x_f128); | 3023 | return zig_f128_isNaN(&op->data.x_f128); |
| 2971 | default: | 3024 | default: |
| ... | @@ -3006,6 +3059,14 @@ static Cmp float_cmp(ZigValue *op1, ZigValue *op2) { | ... | @@ -3006,6 +3059,14 @@ static Cmp float_cmp(ZigValue *op1, ZigValue *op2) { |
| 3006 | } else { | 3059 | } else { |
| 3007 | return CmpEQ; | 3060 | return CmpEQ; |
| 3008 | } | 3061 | } |
| 3062 | case 80: | ||
| 3063 | if (extF80M_lt(&op1->data.x_f80, &op2->data.x_f80)) { | ||
| 3064 | return CmpLT; | ||
| 3065 | } else if (extF80M_eq(&op1->data.x_f80, &op2->data.x_f80)) { | ||
| 3066 | return CmpEQ; | ||
| 3067 | } else { | ||
| 3068 | return CmpGT; | ||
| 3069 | } | ||
| 3009 | case 128: | 3070 | case 128: |
| 3010 | if (f128M_lt(&op1->data.x_f128, &op2->data.x_f128)) { | 3071 | if (f128M_lt(&op1->data.x_f128, &op2->data.x_f128)) { |
| 3011 | return CmpLT; | 3072 | return CmpLT; |
| ... | @@ -3061,7 +3122,18 @@ static Cmp float_cmp_zero(ZigValue *op) { | ... | @@ -3061,7 +3122,18 @@ static Cmp float_cmp_zero(ZigValue *op) { |
| 3061 | } else { | 3122 | } else { |
| 3062 | return CmpEQ; | 3123 | return CmpEQ; |
| 3063 | } | 3124 | } |
| 3064 | case 128: | 3125 | case 80: { |
| 3126 | extFloat80_t zero_float; | ||
| 3127 | ui32_to_extF80M(0, &zero_float); | ||
| 3128 | if (extF80M_lt(&op->data.x_f80, &zero_float)) { | ||
| 3129 | return CmpLT; | ||
| 3130 | } else if (extF80M_eq(&op->data.x_f80, &zero_float)) { | ||
| 3131 | return CmpEQ; | ||
| 3132 | } else { | ||
| 3133 | return CmpGT; | ||
| 3134 | } | ||
| 3135 | } | ||
| 3136 | case 128: { | ||
| 3065 | float128_t zero_float; | 3137 | float128_t zero_float; |
| 3066 | ui32_to_f128M(0, &zero_float); | 3138 | ui32_to_f128M(0, &zero_float); |
| 3067 | if (f128M_lt(&op->data.x_f128, &zero_float)) { | 3139 | if (f128M_lt(&op->data.x_f128, &zero_float)) { |
| ... | @@ -3071,6 +3143,7 @@ static Cmp float_cmp_zero(ZigValue *op) { | ... | @@ -3071,6 +3143,7 @@ static Cmp float_cmp_zero(ZigValue *op) { |
| 3071 | } else { | 3143 | } else { |
| 3072 | return CmpGT; | 3144 | return CmpGT; |
| 3073 | } | 3145 | } |
| 3146 | } | ||
| 3074 | default: | 3147 | default: |
| 3075 | zig_unreachable(); | 3148 | zig_unreachable(); |
| 3076 | } | 3149 | } |
| ... | @@ -3095,6 +3168,9 @@ static void float_add(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3095,6 +3168,9 @@ static void float_add(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3095 | case 64: | 3168 | case 64: |
| 3096 | out_val->data.x_f64 = op1->data.x_f64 + op2->data.x_f64; | 3169 | out_val->data.x_f64 = op1->data.x_f64 + op2->data.x_f64; |
| 3097 | return; | 3170 | return; |
| 3171 | case 80: | ||
| 3172 | extF80M_add(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3173 | return; | ||
| 3098 | case 128: | 3174 | case 128: |
| 3099 | f128M_add(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3175 | f128M_add(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3100 | return; | 3176 | return; |
| ... | @@ -3122,6 +3198,9 @@ static void float_sub(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3122,6 +3198,9 @@ static void float_sub(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3122 | case 64: | 3198 | case 64: |
| 3123 | out_val->data.x_f64 = op1->data.x_f64 - op2->data.x_f64; | 3199 | out_val->data.x_f64 = op1->data.x_f64 - op2->data.x_f64; |
| 3124 | return; | 3200 | return; |
| 3201 | case 80: | ||
| 3202 | extF80M_sub(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3203 | return; | ||
| 3125 | case 128: | 3204 | case 128: |
| 3126 | f128M_sub(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3205 | f128M_sub(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3127 | return; | 3206 | return; |
| ... | @@ -3149,6 +3228,9 @@ static void float_mul(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3149,6 +3228,9 @@ static void float_mul(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3149 | case 64: | 3228 | case 64: |
| 3150 | out_val->data.x_f64 = op1->data.x_f64 * op2->data.x_f64; | 3229 | out_val->data.x_f64 = op1->data.x_f64 * op2->data.x_f64; |
| 3151 | return; | 3230 | return; |
| 3231 | case 80: | ||
| 3232 | extF80M_mul(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3233 | return; | ||
| 3152 | case 128: | 3234 | case 128: |
| 3153 | f128M_mul(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3235 | f128M_mul(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3154 | return; | 3236 | return; |
| ... | @@ -3176,6 +3258,9 @@ static void float_div(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3176,6 +3258,9 @@ static void float_div(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3176 | case 64: | 3258 | case 64: |
| 3177 | out_val->data.x_f64 = op1->data.x_f64 / op2->data.x_f64; | 3259 | out_val->data.x_f64 = op1->data.x_f64 / op2->data.x_f64; |
| 3178 | return; | 3260 | return; |
| 3261 | case 80: | ||
| 3262 | extF80M_div(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3263 | return; | ||
| 3179 | case 128: | 3264 | case 128: |
| 3180 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3265 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3181 | return; | 3266 | return; |
| ... | @@ -3204,6 +3289,10 @@ static void float_div_trunc(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3204,6 +3289,10 @@ static void float_div_trunc(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3204 | case 64: | 3289 | case 64: |
| 3205 | out_val->data.x_f64 = trunc(op1->data.x_f64 / op2->data.x_f64); | 3290 | out_val->data.x_f64 = trunc(op1->data.x_f64 / op2->data.x_f64); |
| 3206 | return; | 3291 | return; |
| 3292 | case 80: | ||
| 3293 | extF80M_div(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3294 | extF80M_roundToInt(&out_val->data.x_f80, softfloat_round_minMag, false, &out_val->data.x_f80); | ||
| 3295 | return; | ||
| 3207 | case 128: | 3296 | case 128: |
| 3208 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3297 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3209 | f128M_roundToInt(&out_val->data.x_f128, softfloat_round_minMag, false, &out_val->data.x_f128); | 3298 | f128M_roundToInt(&out_val->data.x_f128, softfloat_round_minMag, false, &out_val->data.x_f128); |
| ... | @@ -3233,6 +3322,10 @@ static void float_div_floor(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3233,6 +3322,10 @@ static void float_div_floor(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3233 | case 64: | 3322 | case 64: |
| 3234 | out_val->data.x_f64 = floor(op1->data.x_f64 / op2->data.x_f64); | 3323 | out_val->data.x_f64 = floor(op1->data.x_f64 / op2->data.x_f64); |
| 3235 | return; | 3324 | return; |
| 3325 | case 80: | ||
| 3326 | extF80M_div(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3327 | extF80M_roundToInt(&out_val->data.x_f80, softfloat_round_min, false, &out_val->data.x_f80); | ||
| 3328 | return; | ||
| 3236 | case 128: | 3329 | case 128: |
| 3237 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3330 | f128M_div(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3238 | f128M_roundToInt(&out_val->data.x_f128, softfloat_round_min, false, &out_val->data.x_f128); | 3331 | f128M_roundToInt(&out_val->data.x_f128, softfloat_round_min, false, &out_val->data.x_f128); |
| ... | @@ -3261,6 +3354,9 @@ static void float_rem(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3261,6 +3354,9 @@ static void float_rem(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3261 | case 64: | 3354 | case 64: |
| 3262 | out_val->data.x_f64 = fmod(op1->data.x_f64, op2->data.x_f64); | 3355 | out_val->data.x_f64 = fmod(op1->data.x_f64, op2->data.x_f64); |
| 3263 | return; | 3356 | return; |
| 3357 | case 80: | ||
| 3358 | extF80M_rem(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3359 | return; | ||
| 3264 | case 128: | 3360 | case 128: |
| 3265 | f128M_rem(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3361 | f128M_rem(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3266 | return; | 3362 | return; |
| ... | @@ -3290,6 +3386,14 @@ static void zig_f128M_mod(const float128_t* a, const float128_t* b, float128_t* | ... | @@ -3290,6 +3386,14 @@ static void zig_f128M_mod(const float128_t* a, const float128_t* b, float128_t* |
| 3290 | f128M_sub(a, c, c); | 3386 | f128M_sub(a, c, c); |
| 3291 | } | 3387 | } |
| 3292 | 3388 | ||
| 3389 | // c = a - b * trunc(a / b) | ||
| 3390 | static void zig_extF80M_mod(const extFloat80_t* a, const extFloat80_t* b, extFloat80_t* c) { | ||
| 3391 | extF80M_div(a, b, c); | ||
| 3392 | extF80M_roundToInt(c, softfloat_round_min, true, c); | ||
| 3393 | extF80M_mul(b, c, c); | ||
| 3394 | extF80M_sub(a, c, c); | ||
| 3395 | } | ||
| 3396 | |||
| 3293 | static void float_mod(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | 3397 | static void float_mod(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3294 | assert(op1->type == op2->type); | 3398 | assert(op1->type == op2->type); |
| 3295 | out_val->type = op1->type; | 3399 | out_val->type = op1->type; |
| ... | @@ -3306,6 +3410,9 @@ static void float_mod(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3306,6 +3410,9 @@ static void float_mod(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3306 | case 64: | 3410 | case 64: |
| 3307 | out_val->data.x_f64 = fmod(fmod(op1->data.x_f64, op2->data.x_f64) + op2->data.x_f64, op2->data.x_f64); | 3411 | out_val->data.x_f64 = fmod(fmod(op1->data.x_f64, op2->data.x_f64) + op2->data.x_f64, op2->data.x_f64); |
| 3308 | return; | 3412 | return; |
| 3413 | case 80: | ||
| 3414 | zig_extF80M_mod(&op1->data.x_f80, &op2->data.x_f80, &out_val->data.x_f80); | ||
| 3415 | return; | ||
| 3309 | case 128: | 3416 | case 128: |
| 3310 | zig_f128M_mod(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); | 3417 | zig_f128M_mod(&op1->data.x_f128, &op2->data.x_f128, &out_val->data.x_f128); |
| 3311 | return; | 3418 | return; |
| ... | @@ -3351,6 +3458,15 @@ static void float_max(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3351,6 +3458,15 @@ static void float_max(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3351 | out_val->data.x_f64 = op1->data.x_f64 > op2->data.x_f64 ? op1->data.x_f64 : op2->data.x_f64; | 3458 | out_val->data.x_f64 = op1->data.x_f64 > op2->data.x_f64 ? op1->data.x_f64 : op2->data.x_f64; |
| 3352 | } | 3459 | } |
| 3353 | return; | 3460 | return; |
| 3461 | case 80: | ||
| 3462 | if (zig_extF80_isNaN(&op1->data.x_f80)) { | ||
| 3463 | out_val->data.x_f80 = op2->data.x_f80; | ||
| 3464 | } else if (zig_extF80_isNaN(&op2->data.x_f80)) { | ||
| 3465 | out_val->data.x_f80 = op1->data.x_f80; | ||
| 3466 | } else { | ||
| 3467 | out_val->data.x_f80 = extF80M_lt(&op1->data.x_f80, &op2->data.x_f80) ? op2->data.x_f80 : op1->data.x_f80; | ||
| 3468 | } | ||
| 3469 | return; | ||
| 3354 | case 128: | 3470 | case 128: |
| 3355 | if (zig_f128_isNaN(&op1->data.x_f128)) { | 3471 | if (zig_f128_isNaN(&op1->data.x_f128)) { |
| 3356 | out_val->data.x_f128 = op2->data.x_f128; | 3472 | out_val->data.x_f128 = op2->data.x_f128; |
| ... | @@ -3402,6 +3518,15 @@ static void float_min(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { | ... | @@ -3402,6 +3518,15 @@ static void float_min(ZigValue *out_val, ZigValue *op1, ZigValue *op2) { |
| 3402 | out_val->data.x_f64 = op1->data.x_f32 < op2->data.x_f64 ? op1->data.x_f64 : op2->data.x_f64; | 3518 | out_val->data.x_f64 = op1->data.x_f32 < op2->data.x_f64 ? op1->data.x_f64 : op2->data.x_f64; |
| 3403 | } | 3519 | } |
| 3404 | return; | 3520 | return; |
| 3521 | case 80: | ||
| 3522 | if (zig_extF80_isNaN(&op1->data.x_f80)) { | ||
| 3523 | out_val->data.x_f80 = op2->data.x_f80; | ||
| 3524 | } else if (zig_extF80_isNaN(&op2->data.x_f80)) { | ||
| 3525 | out_val->data.x_f80 = op1->data.x_f80; | ||
| 3526 | } else { | ||
| 3527 | out_val->data.x_f80 = extF80M_lt(&op1->data.x_f80, &op2->data.x_f80) ? op1->data.x_f80 : op2->data.x_f80; | ||
| 3528 | } | ||
| 3529 | return; | ||
| 3405 | case 128: | 3530 | case 128: |
| 3406 | if (zig_f128_isNaN(&op1->data.x_f128)) { | 3531 | if (zig_f128_isNaN(&op1->data.x_f128)) { |
| 3407 | out_val->data.x_f128 = op2->data.x_f128; | 3532 | out_val->data.x_f128 = op2->data.x_f128; |
| ... | @@ -3434,6 +3559,9 @@ static void float_negate(ZigValue *out_val, ZigValue *op) { | ... | @@ -3434,6 +3559,9 @@ static void float_negate(ZigValue *out_val, ZigValue *op) { |
| 3434 | case 64: | 3559 | case 64: |
| 3435 | out_val->data.x_f64 = -op->data.x_f64; | 3560 | out_val->data.x_f64 = -op->data.x_f64; |
| 3436 | return; | 3561 | return; |
| 3562 | case 80: | ||
| 3563 | extF80M_neg(&op->data.x_f80, &out_val->data.x_f80); | ||
| 3564 | return; | ||
| 3437 | case 128: | 3565 | case 128: |
| 3438 | f128M_neg(&op->data.x_f128, &out_val->data.x_f128); | 3566 | f128M_neg(&op->data.x_f128, &out_val->data.x_f128); |
| 3439 | return; | 3567 | return; |
| ... | @@ -3462,6 +3590,9 @@ void float_write_ieee597(ZigValue *op, uint8_t *buf, bool target_is_big_endian) | ... | @@ -3462,6 +3590,9 @@ void float_write_ieee597(ZigValue *op, uint8_t *buf, bool target_is_big_endian) |
| 3462 | case 64: | 3590 | case 64: |
| 3463 | memcpy(buf, &op->data.x_f64, 8); | 3591 | memcpy(buf, &op->data.x_f64, 8); |
| 3464 | break; | 3592 | break; |
| 3593 | case 80: | ||
| 3594 | memcpy(buf, &op->data.x_f80, 16); | ||
| 3595 | break; | ||
| 3465 | case 128: | 3596 | case 128: |
| 3466 | memcpy(buf, &op->data.x_f128, 16); | 3597 | memcpy(buf, &op->data.x_f128, 16); |
| 3467 | break; | 3598 | break; |
| ... | @@ -3511,6 +3642,9 @@ void float_read_ieee597(ZigValue *val, uint8_t *buf, bool target_is_big_endian) | ... | @@ -3511,6 +3642,9 @@ void float_read_ieee597(ZigValue *val, uint8_t *buf, bool target_is_big_endian) |
| 3511 | case 64: | 3642 | case 64: |
| 3512 | memcpy(&val->data.x_f64, ptr, 8); | 3643 | memcpy(&val->data.x_f64, ptr, 8); |
| 3513 | return; | 3644 | return; |
| 3645 | case 80: | ||
| 3646 | memcpy(&val->data.x_f80, ptr, 16); | ||
| 3647 | return; | ||
| 3514 | case 128: | 3648 | case 128: |
| 3515 | memcpy(&val->data.x_f128, ptr, 16); | 3649 | memcpy(&val->data.x_f128, ptr, 16); |
| 3516 | return; | 3650 | return; |
| ... | @@ -3538,8 +3672,12 @@ static void value_to_bigfloat(BigFloat *out, ZigValue *val) { | ... | @@ -3538,8 +3672,12 @@ static void value_to_bigfloat(BigFloat *out, ZigValue *val) { |
| 3538 | case 64: | 3672 | case 64: |
| 3539 | bigfloat_init_64(out, val->data.x_f64); | 3673 | bigfloat_init_64(out, val->data.x_f64); |
| 3540 | return; | 3674 | return; |
| 3541 | case 80: | 3675 | case 80: { |
| 3542 | zig_panic("TODO: value_to_bigfloat c_longdouble"); | 3676 | float128_t f128_value; |
| 3677 | extF80M_to_f128M(&val->data.x_f80, &f128_value); | ||
| 3678 | bigfloat_init_128(out, f128_value); | ||
| 3679 | return; | ||
| 3680 | } | ||
| 3543 | case 128: | 3681 | case 128: |
| 3544 | bigfloat_init_128(out, val->data.x_f128); | 3682 | bigfloat_init_128(out, val->data.x_f128); |
| 3545 | return; | 3683 | return; |
| ... | @@ -3628,8 +3766,14 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc | ... | @@ -3628,8 +3766,14 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc |
| 3628 | bigfloat_init_64(&orig_bf, tmp); | 3766 | bigfloat_init_64(&orig_bf, tmp); |
| 3629 | break; | 3767 | break; |
| 3630 | } | 3768 | } |
| 3631 | case 80: | 3769 | case 80: { |
| 3632 | zig_panic("TODO: ir_num_lit_fits_in_other_type c_longdouble"); | 3770 | float128_t tmp = bigfloat_to_f128(&tmp_bf); |
| 3771 | extFloat80_t tmp80; | ||
| 3772 | f128M_to_extF80M(&tmp, &tmp80); | ||
| 3773 | extF80M_to_f128M(&tmp80, &tmp); | ||
| 3774 | bigfloat_init_128(&orig_bf, tmp); | ||
| 3775 | break; | ||
| 3776 | } | ||
| 3633 | case 128: { | 3777 | case 128: { |
| 3634 | float128_t tmp = bigfloat_to_f128(&tmp_bf); | 3778 | float128_t tmp = bigfloat_to_f128(&tmp_bf); |
| 3635 | bigfloat_init_128(&orig_bf, tmp); | 3779 | bigfloat_init_128(&orig_bf, tmp); |
| ... | @@ -3673,8 +3817,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc | ... | @@ -3673,8 +3817,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc |
| 3673 | } | 3817 | } |
| 3674 | break; | 3818 | break; |
| 3675 | } | 3819 | } |
| 3676 | case 80: | 3820 | case 80: { |
| 3677 | zig_panic("TODO: ir_num_lit_fits_in_other_type c_longdouble"); | 3821 | float16_t tmp = extF80M_to_f16(&const_val->data.x_f80); |
| 3822 | extFloat80_t orig; | ||
| 3823 | f16_to_extF80M(tmp, &orig); | ||
| 3824 | if (extF80M_eq(&orig, &const_val->data.x_f80)) { | ||
| 3825 | return true; | ||
| 3826 | } | ||
| 3827 | break; | ||
| 3828 | } | ||
| 3678 | case 128: { | 3829 | case 128: { |
| 3679 | float16_t tmp = f128M_to_f16(&const_val->data.x_f128); | 3830 | float16_t tmp = f128M_to_f16(&const_val->data.x_f128); |
| 3680 | float128_t orig; | 3831 | float128_t orig; |
| ... | @@ -3698,8 +3849,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc | ... | @@ -3698,8 +3849,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc |
| 3698 | } | 3849 | } |
| 3699 | break; | 3850 | break; |
| 3700 | } | 3851 | } |
| 3701 | case 80: | 3852 | case 80: { |
| 3702 | zig_panic("TODO: ir_num_lit_fits_in_other_type c_longdouble"); | 3853 | float32_t tmp = extF80M_to_f32(&const_val->data.x_f80); |
| 3854 | extFloat80_t orig; | ||
| 3855 | f32_to_extF80M(tmp, &orig); | ||
| 3856 | if (extF80M_eq(&orig, &const_val->data.x_f80)) { | ||
| 3857 | return true; | ||
| 3858 | } | ||
| 3859 | break; | ||
| 3860 | } | ||
| 3703 | case 128: { | 3861 | case 128: { |
| 3704 | float32_t tmp = f128M_to_f32(&const_val->data.x_f128); | 3862 | float32_t tmp = f128M_to_f32(&const_val->data.x_f128); |
| 3705 | float128_t orig; | 3863 | float128_t orig; |
| ... | @@ -3715,8 +3873,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc | ... | @@ -3715,8 +3873,15 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc |
| 3715 | break; | 3873 | break; |
| 3716 | case 64: | 3874 | case 64: |
| 3717 | switch (const_val->type->data.floating.bit_count) { | 3875 | switch (const_val->type->data.floating.bit_count) { |
| 3718 | case 80: | 3876 | case 80: { |
| 3719 | zig_panic("TODO: ir_num_lit_fits_in_other_type c_longdouble"); | 3877 | float64_t tmp = extF80M_to_f64(&const_val->data.x_f80); |
| 3878 | extFloat80_t orig; | ||
| 3879 | f64_to_extF80M(tmp, &orig); | ||
| 3880 | if (extF80M_eq(&orig, &const_val->data.x_f80)) { | ||
| 3881 | return true; | ||
| 3882 | } | ||
| 3883 | break; | ||
| 3884 | } | ||
| 3720 | case 128: { | 3885 | case 128: { |
| 3721 | float64_t tmp = f128M_to_f64(&const_val->data.x_f128); | 3886 | float64_t tmp = f128M_to_f64(&const_val->data.x_f128); |
| 3722 | float128_t orig; | 3887 | float128_t orig; |
| ... | @@ -3730,9 +3895,17 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc | ... | @@ -3730,9 +3895,17 @@ static bool ir_num_lit_fits_in_other_type(IrAnalyze *ira, Stage1AirInst *instruc |
| 3730 | zig_unreachable(); | 3895 | zig_unreachable(); |
| 3731 | } | 3896 | } |
| 3732 | break; | 3897 | break; |
| 3733 | case 80: | 3898 | case 80: { |
| 3734 | assert(const_val->type->data.floating.bit_count == 128); | 3899 | assert(const_val->type->data.floating.bit_count == 128); |
| 3735 | zig_panic("TODO: ir_num_lit_fits_in_other_type c_longdouble"); | 3900 | extFloat80_t tmp; |
| 3901 | f128M_to_extF80M(&const_val->data.x_f128, &tmp); | ||
| 3902 | float128_t orig; | ||
| 3903 | extF80M_to_f128M(&tmp, &orig); | ||
| 3904 | if (f128M_eq(&orig, &const_val->data.x_f128)) { | ||
| 3905 | return true; | ||
| 3906 | } | ||
| 3907 | break; | ||
| 3908 | } | ||
| 3736 | case 128: | 3909 | case 128: |
| 3737 | return true; | 3910 | return true; |
| 3738 | default: | 3911 | default: |
| ... | @@ -5143,8 +5316,11 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, Scope *scope, AstNode | ... | @@ -5143,8 +5316,11 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, Scope *scope, AstNode |
| 5143 | case 64: | 5316 | case 64: |
| 5144 | const_val->data.x_f64 = bigfloat_to_f64(&other_val->data.x_bigfloat); | 5317 | const_val->data.x_f64 = bigfloat_to_f64(&other_val->data.x_bigfloat); |
| 5145 | break; | 5318 | break; |
| 5146 | case 80: | 5319 | case 80: { |
| 5147 | zig_panic("TODO: eval_const_expr_implicit_cast c_longdouble"); | 5320 | float128_t tmp = bigfloat_to_f128(&other_val->data.x_bigfloat); |
| 5321 | f128M_to_extF80M(&tmp, &const_val->data.x_f80); | ||
| 5322 | break; | ||
| 5323 | } | ||
| 5148 | case 128: | 5324 | case 128: |
| 5149 | const_val->data.x_f128 = bigfloat_to_f128(&other_val->data.x_bigfloat); | 5325 | const_val->data.x_f128 = bigfloat_to_f128(&other_val->data.x_bigfloat); |
| 5150 | break; | 5326 | break; |
| ... | @@ -5172,8 +5348,11 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, Scope *scope, AstNode | ... | @@ -5172,8 +5348,11 @@ static bool eval_const_expr_implicit_cast(IrAnalyze *ira, Scope *scope, AstNode |
| 5172 | case 64: | 5348 | case 64: |
| 5173 | const_val->data.x_f64 = bigfloat_to_f64(&bigfloat); | 5349 | const_val->data.x_f64 = bigfloat_to_f64(&bigfloat); |
| 5174 | break; | 5350 | break; |
| 5175 | case 80: | 5351 | case 80: { |
| 5176 | zig_panic("TODO: eval_const_expr_implicit_cast c_longdouble"); | 5352 | float128_t tmp = bigfloat_to_f128(&other_val->data.x_bigfloat); |
| 5353 | f128M_to_extF80M(&tmp, &const_val->data.x_f80); | ||
| 5354 | break; | ||
| 5355 | } | ||
| 5177 | case 128: | 5356 | case 128: |
| 5178 | const_val->data.x_f128 = bigfloat_to_f128(&bigfloat); | 5357 | const_val->data.x_f128 = bigfloat_to_f128(&bigfloat); |
| 5179 | break; | 5358 | break; |
| ... | @@ -18960,6 +19139,7 @@ static ZigType *type_info_to_type(IrAnalyze *ira, Scope *scope, AstNode *source_ | ... | @@ -18960,6 +19139,7 @@ static ZigType *type_info_to_type(IrAnalyze *ira, Scope *scope, AstNode *source_ |
| 18960 | case 16: return ira->codegen->builtin_types.entry_f16; | 19139 | case 16: return ira->codegen->builtin_types.entry_f16; |
| 18961 | case 32: return ira->codegen->builtin_types.entry_f32; | 19140 | case 32: return ira->codegen->builtin_types.entry_f32; |
| 18962 | case 64: return ira->codegen->builtin_types.entry_f64; | 19141 | case 64: return ira->codegen->builtin_types.entry_f64; |
| 19142 | case 80: return ira->codegen->builtin_types.entry_f80; | ||
| 18963 | case 128: return ira->codegen->builtin_types.entry_f128; | 19143 | case 128: return ira->codegen->builtin_types.entry_f128; |
| 18964 | } | 19144 | } |
| 18965 | ir_add_error_node(ira, source_node, buf_sprintf("%d-bit float unsupported", bits)); | 19145 | ir_add_error_node(ira, source_node, buf_sprintf("%d-bit float unsupported", bits)); |
| ... | @@ -21943,6 +22123,8 @@ static void ir_eval_mul_add(IrAnalyze *ira, ZigType *float_type, | ... | @@ -21943,6 +22123,8 @@ static void ir_eval_mul_add(IrAnalyze *ira, ZigType *float_type, |
| 21943 | case 64: | 22123 | case 64: |
| 21944 | out_val->data.x_f64 = fma(op1->data.x_f64, op2->data.x_f64, op3->data.x_f64); | 22124 | out_val->data.x_f64 = fma(op1->data.x_f64, op2->data.x_f64, op3->data.x_f64); |
| 21945 | break; | 22125 | break; |
| 22126 | case 80: | ||
| 22127 | zig_panic("compiler bug: TODO: implement 'mulAdd' for type 'f80'. See https://github.com/ziglang/zig/issues/4026"); | ||
| 21946 | case 128: | 22128 | case 128: |
| 21947 | f128M_mulAdd(&op1->data.x_f128, &op2->data.x_f128, &op3->data.x_f128, &out_val->data.x_f128); | 22129 | f128M_mulAdd(&op1->data.x_f128, &op2->data.x_f128, &op3->data.x_f128, &out_val->data.x_f128); |
| 21948 | break; | 22130 | break; |
| ... | @@ -24156,10 +24338,44 @@ static ErrorMsg *ir_eval_float_op(IrAnalyze *ira, Scope *scope, AstNode *source_ | ... | @@ -24156,10 +24338,44 @@ static ErrorMsg *ir_eval_float_op(IrAnalyze *ira, Scope *scope, AstNode *source_ |
| 24156 | } | 24338 | } |
| 24157 | break; | 24339 | break; |
| 24158 | } | 24340 | } |
| 24159 | case 80: | 24341 | case 80: { |
| 24160 | return ir_add_error_node(ira, source_node, | 24342 | extFloat80_t *out = &out_val->data.x_f80; |
| 24161 | buf_sprintf("compiler bug: TODO: implement '%s' for type '%s'. See https://github.com/ziglang/zig/issues/4026", | 24343 | extFloat80_t *in = &op->data.x_f80; |
| 24162 | float_op_to_name(fop), buf_ptr(&float_type->name))); | 24344 | switch (fop) { |
| 24345 | case BuiltinFnIdSqrt: | ||
| 24346 | extF80M_sqrt(in, out); | ||
| 24347 | break; | ||
| 24348 | case BuiltinFnIdFabs: | ||
| 24349 | extF80M_abs(in, out); | ||
| 24350 | break; | ||
| 24351 | case BuiltinFnIdFloor: | ||
| 24352 | extF80M_roundToInt(in, softfloat_round_min, false, out); | ||
| 24353 | break; | ||
| 24354 | case BuiltinFnIdCeil: | ||
| 24355 | extF80M_roundToInt(in, softfloat_round_max, false, out); | ||
| 24356 | break; | ||
| 24357 | case BuiltinFnIdTrunc: | ||
| 24358 | extF80M_trunc(in, out); | ||
| 24359 | break; | ||
| 24360 | case BuiltinFnIdRound: | ||
| 24361 | extF80M_roundToInt(in, softfloat_round_near_maxMag, false, out); | ||
| 24362 | break; | ||
| 24363 | case BuiltinFnIdNearbyInt: | ||
| 24364 | case BuiltinFnIdSin: | ||
| 24365 | case BuiltinFnIdCos: | ||
| 24366 | case BuiltinFnIdExp: | ||
| 24367 | case BuiltinFnIdExp2: | ||
| 24368 | case BuiltinFnIdLog: | ||
| 24369 | case BuiltinFnIdLog10: | ||
| 24370 | case BuiltinFnIdLog2: | ||
| 24371 | return ir_add_error_node(ira, source_node, | ||
| 24372 | buf_sprintf("compiler bug: TODO: implement '%s' for type '%s'. See https://github.com/ziglang/zig/issues/4026", | ||
| 24373 | float_op_to_name(fop), buf_ptr(&float_type->name))); | ||
| 24374 | default: | ||
| 24375 | zig_unreachable(); | ||
| 24376 | } | ||
| 24377 | break; | ||
| 24378 | } | ||
| 24163 | case 128: { | 24379 | case 128: { |
| 24164 | float128_t *out, *in; | 24380 | float128_t *out, *in; |
| 24165 | if (float_type->id == ZigTypeIdComptimeFloat) { | 24381 | if (float_type->id == ZigTypeIdComptimeFloat) { |
src/stage1/softfloat.hpp+4| ... | @@ -56,4 +56,8 @@ static inline bool zig_f128_isNaN(float128_t *aPtr) { | ... | @@ -56,4 +56,8 @@ static inline bool zig_f128_isNaN(float128_t *aPtr) { |
| 56 | || ((absA64 == UINT64_C(0x7FFF000000000000)) && lo); | 56 | || ((absA64 == UINT64_C(0x7FFF000000000000)) && lo); |
| 57 | } | 57 | } |
| 58 | 58 | ||
| 59 | static inline bool zig_extF80_isNaN(extFloat80_t *aPtr) { | ||
| 60 | return aPtr->signExp & 0x7FFF && aPtr->signif; | ||
| 61 | } | ||
| 62 | |||
| 59 | #endif | 63 | #endif |
src/stage1/softfloat_ext.cpp+30-8| ... | @@ -28,13 +28,6 @@ void f128M_trunc(const float128_t *aPtr, float128_t *zPtr) { | ... | @@ -28,13 +28,6 @@ void f128M_trunc(const float128_t *aPtr, float128_t *zPtr) { |
| 28 | } | 28 | } |
| 29 | } | 29 | } |
| 30 | 30 | ||
| 31 | float16_t f16_neg(const float16_t a) { | ||
| 32 | union { uint16_t ui; float16_t f; } uA; | ||
| 33 | // Toggle the sign bit. | ||
| 34 | uA.ui = a.v ^ (UINT16_C(1) << 15); | ||
| 35 | return uA.f; | ||
| 36 | } | ||
| 37 | |||
| 38 | void f128M_neg(const float128_t *aPtr, float128_t *zPtr) { | 31 | void f128M_neg(const float128_t *aPtr, float128_t *zPtr) { |
| 39 | // Toggle the sign bit. | 32 | // Toggle the sign bit. |
| 40 | #if ZIG_BYTE_ORDER == ZIG_LITTLE_ENDIAN | 33 | #if ZIG_BYTE_ORDER == ZIG_LITTLE_ENDIAN |
| ... | @@ -46,4 +39,33 @@ void f128M_neg(const float128_t *aPtr, float128_t *zPtr) { | ... | @@ -46,4 +39,33 @@ void f128M_neg(const float128_t *aPtr, float128_t *zPtr) { |
| 46 | #else | 39 | #else |
| 47 | #error Unsupported endian | 40 | #error Unsupported endian |
| 48 | #endif | 41 | #endif |
| 49 | } | ||
| \ No newline at end of file | |||
| 42 | } | ||
| 43 | |||
| 44 | void extF80M_abs(const extFloat80_t *aPtr, extFloat80_t *zPtr) { | ||
| 45 | // Clear the sign bit. | ||
| 46 | zPtr->signExp = aPtr->signExp & UINT16_C(0x7FFF); | ||
| 47 | zPtr->signif = aPtr->signif; | ||
| 48 | } | ||
| 49 | |||
| 50 | void extF80M_trunc(const extFloat80_t *aPtr, extFloat80_t *zPtr) { | ||
| 51 | extFloat80_t zero_float; | ||
| 52 | ui32_to_extF80M(0, &zero_float); | ||
| 53 | if (extF80M_lt(aPtr, &zero_float)) { | ||
| 54 | extF80M_roundToInt(aPtr, softfloat_round_max, false, zPtr); | ||
| 55 | } else { | ||
| 56 | extF80M_roundToInt(aPtr, softfloat_round_min, false, zPtr); | ||
| 57 | } | ||
| 58 | } | ||
| 59 | |||
| 60 | void extF80M_neg(const extFloat80_t *aPtr, extFloat80_t *zPtr) { | ||
| 61 | // Toggle the sign bit. | ||
| 62 | zPtr->signExp = aPtr->signExp ^ UINT16_C(0x8000); | ||
| 63 | zPtr->signif = aPtr->signif; | ||
| 64 | } | ||
| 65 | |||
| 66 | float16_t f16_neg(const float16_t a) { | ||
| 67 | union { uint16_t ui; float16_t f; } uA; | ||
| 68 | // Toggle the sign bit. | ||
| 69 | uA.ui = a.v ^ (UINT16_C(1) << 15); | ||
| 70 | return uA.f; | ||
| 71 | } | ||
src/stage1/softfloat_ext.hpp+4| ... | @@ -7,6 +7,10 @@ void f128M_abs(const float128_t *aPtr, float128_t *zPtr); | ... | @@ -7,6 +7,10 @@ void f128M_abs(const float128_t *aPtr, float128_t *zPtr); |
| 7 | void f128M_trunc(const float128_t *aPtr, float128_t *zPtr); | 7 | void f128M_trunc(const float128_t *aPtr, float128_t *zPtr); |
| 8 | void f128M_neg(const float128_t *aPtr, float128_t *zPtr); | 8 | void f128M_neg(const float128_t *aPtr, float128_t *zPtr); |
| 9 | 9 | ||
| 10 | void extF80M_abs(const extFloat80_t *aPtr, extFloat80_t *zPtr); | ||
| 11 | void extF80M_trunc(const extFloat80_t *aPtr, extFloat80_t *zPtr); | ||
| 12 | void extF80M_neg(const extFloat80_t *aPtr, extFloat80_t *zPtr); | ||
| 13 | |||
| 10 | float16_t f16_neg(const float16_t a); | 14 | float16_t f16_neg(const float16_t a); |
| 11 | 15 | ||
| 12 | #endif | 16 | #endif |
| \ No newline at end of file | |||
src/stage1/target.cpp+11| ... | @@ -1019,6 +1019,17 @@ bool target_long_double_is_f128(const ZigTarget *target) { | ... | @@ -1019,6 +1019,17 @@ bool target_long_double_is_f128(const ZigTarget *target) { |
| 1019 | } | 1019 | } |
| 1020 | } | 1020 | } |
| 1021 | 1021 | ||
| 1022 | bool target_has_f80(const ZigTarget *target) { | ||
| 1023 | switch (target->arch) { | ||
| 1024 | case ZigLLVM_x86: | ||
| 1025 | case ZigLLVM_x86_64: | ||
| 1026 | return true; | ||
| 1027 | |||
| 1028 | default: | ||
| 1029 | return false; | ||
| 1030 | } | ||
| 1031 | } | ||
| 1032 | |||
| 1022 | bool target_is_riscv(const ZigTarget *target) { | 1033 | bool target_is_riscv(const ZigTarget *target) { |
| 1023 | return target->arch == ZigLLVM_riscv32 || target->arch == ZigLLVM_riscv64; | 1034 | return target->arch == ZigLLVM_riscv32 || target->arch == ZigLLVM_riscv64; |
| 1024 | } | 1035 | } |
src/stage1/target.hpp+1| ... | @@ -81,6 +81,7 @@ bool target_is_sparc(const ZigTarget *target); | ... | @@ -81,6 +81,7 @@ bool target_is_sparc(const ZigTarget *target); |
| 81 | bool target_is_android(const ZigTarget *target); | 81 | bool target_is_android(const ZigTarget *target); |
| 82 | bool target_has_debug_info(const ZigTarget *target); | 82 | bool target_has_debug_info(const ZigTarget *target); |
| 83 | bool target_long_double_is_f128(const ZigTarget *target); | 83 | bool target_long_double_is_f128(const ZigTarget *target); |
| 84 | bool target_has_f80(const ZigTarget *target); | ||
| 84 | 85 | ||
| 85 | uint32_t target_arch_pointer_bit_width(ZigLLVM_ArchType arch); | 86 | uint32_t target_arch_pointer_bit_width(ZigLLVM_ArchType arch); |
| 86 | uint32_t target_arch_largest_atomic_bits(ZigLLVM_ArchType arch); | 87 | uint32_t target_arch_largest_atomic_bits(ZigLLVM_ArchType arch); |
src/type.zig+17| ... | @@ -58,6 +58,7 @@ pub const Type = extern union { | ... | @@ -58,6 +58,7 @@ pub const Type = extern union { |
| 58 | .f16, | 58 | .f16, |
| 59 | .f32, | 59 | .f32, |
| 60 | .f64, | 60 | .f64, |
| 61 | .f80, | ||
| 61 | .f128, | 62 | .f128, |
| 62 | .c_longdouble, | 63 | .c_longdouble, |
| 63 | => return .Float, | 64 | => return .Float, |
| ... | @@ -833,6 +834,7 @@ pub const Type = extern union { | ... | @@ -833,6 +834,7 @@ pub const Type = extern union { |
| 833 | .f16, | 834 | .f16, |
| 834 | .f32, | 835 | .f32, |
| 835 | .f64, | 836 | .f64, |
| 837 | .f80, | ||
| 836 | .f128, | 838 | .f128, |
| 837 | .bool, | 839 | .bool, |
| 838 | .void, | 840 | .void, |
| ... | @@ -1053,6 +1055,7 @@ pub const Type = extern union { | ... | @@ -1053,6 +1055,7 @@ pub const Type = extern union { |
| 1053 | .f16, | 1055 | .f16, |
| 1054 | .f32, | 1056 | .f32, |
| 1055 | .f64, | 1057 | .f64, |
| 1058 | .f80, | ||
| 1056 | .f128, | 1059 | .f128, |
| 1057 | .bool, | 1060 | .bool, |
| 1058 | .void, | 1061 | .void, |
| ... | @@ -1371,6 +1374,7 @@ pub const Type = extern union { | ... | @@ -1371,6 +1374,7 @@ pub const Type = extern union { |
| 1371 | .f16, | 1374 | .f16, |
| 1372 | .f32, | 1375 | .f32, |
| 1373 | .f64, | 1376 | .f64, |
| 1377 | .f80, | ||
| 1374 | .f128, | 1378 | .f128, |
| 1375 | .bool, | 1379 | .bool, |
| 1376 | .void, | 1380 | .void, |
| ... | @@ -1473,6 +1477,7 @@ pub const Type = extern union { | ... | @@ -1473,6 +1477,7 @@ pub const Type = extern union { |
| 1473 | .f16 => return Value.initTag(.f16_type), | 1477 | .f16 => return Value.initTag(.f16_type), |
| 1474 | .f32 => return Value.initTag(.f32_type), | 1478 | .f32 => return Value.initTag(.f32_type), |
| 1475 | .f64 => return Value.initTag(.f64_type), | 1479 | .f64 => return Value.initTag(.f64_type), |
| 1480 | .f80 => return Value.initTag(.f80_type), | ||
| 1476 | .f128 => return Value.initTag(.f128_type), | 1481 | .f128 => return Value.initTag(.f128_type), |
| 1477 | .bool => return Value.initTag(.bool_type), | 1482 | .bool => return Value.initTag(.bool_type), |
| 1478 | .void => return Value.initTag(.void_type), | 1483 | .void => return Value.initTag(.void_type), |
| ... | @@ -1543,6 +1548,7 @@ pub const Type = extern union { | ... | @@ -1543,6 +1548,7 @@ pub const Type = extern union { |
| 1543 | .f16, | 1548 | .f16, |
| 1544 | .f32, | 1549 | .f32, |
| 1545 | .f64, | 1550 | .f64, |
| 1551 | .f80, | ||
| 1546 | .f128, | 1552 | .f128, |
| 1547 | .bool, | 1553 | .bool, |
| 1548 | .anyerror, | 1554 | .anyerror, |
| ... | @@ -1858,6 +1864,7 @@ pub const Type = extern union { | ... | @@ -1858,6 +1864,7 @@ pub const Type = extern union { |
| 1858 | .f16 => return 2, | 1864 | .f16 => return 2, |
| 1859 | .f32 => return 4, | 1865 | .f32 => return 4, |
| 1860 | .f64 => return 8, | 1866 | .f64 => return 8, |
| 1867 | .f80 => return 16, | ||
| 1861 | .f128 => return 16, | 1868 | .f128 => return 16, |
| 1862 | .c_longdouble => return 16, | 1869 | .c_longdouble => return 16, |
| 1863 | 1870 | ||
| ... | @@ -2138,6 +2145,7 @@ pub const Type = extern union { | ... | @@ -2138,6 +2145,7 @@ pub const Type = extern union { |
| 2138 | .f16 => return 2, | 2145 | .f16 => return 2, |
| 2139 | .f32 => return 4, | 2146 | .f32 => return 4, |
| 2140 | .f64 => return 8, | 2147 | .f64 => return 8, |
| 2148 | .f80 => return 16, | ||
| 2141 | .f128 => return 16, | 2149 | .f128 => return 16, |
| 2142 | .c_longdouble => return 16, | 2150 | .c_longdouble => return 16, |
| 2143 | 2151 | ||
| ... | @@ -2277,6 +2285,7 @@ pub const Type = extern union { | ... | @@ -2277,6 +2285,7 @@ pub const Type = extern union { |
| 2277 | .i16, .u16, .f16 => 16, | 2285 | .i16, .u16, .f16 => 16, |
| 2278 | .i32, .u32, .f32 => 32, | 2286 | .i32, .u32, .f32 => 32, |
| 2279 | .i64, .u64, .f64 => 64, | 2287 | .i64, .u64, .f64 => 64, |
| 2288 | .f80 => 80, | ||
| 2280 | .u128, .i128, .f128 => 128, | 2289 | .u128, .i128, .f128 => 128, |
| 2281 | 2290 | ||
| 2282 | .isize, | 2291 | .isize, |
| ... | @@ -3170,6 +3179,7 @@ pub const Type = extern union { | ... | @@ -3170,6 +3179,7 @@ pub const Type = extern union { |
| 3170 | .f16, | 3179 | .f16, |
| 3171 | .f32, | 3180 | .f32, |
| 3172 | .f64, | 3181 | .f64, |
| 3182 | .f80, | ||
| 3173 | .f128, | 3183 | .f128, |
| 3174 | .c_longdouble, | 3184 | .c_longdouble, |
| 3175 | => true, | 3185 | => true, |
| ... | @@ -3184,6 +3194,7 @@ pub const Type = extern union { | ... | @@ -3184,6 +3194,7 @@ pub const Type = extern union { |
| 3184 | .f16, | 3194 | .f16, |
| 3185 | .f32, | 3195 | .f32, |
| 3186 | .f64, | 3196 | .f64, |
| 3197 | .f80, | ||
| 3187 | .f128, | 3198 | .f128, |
| 3188 | .c_longdouble, | 3199 | .c_longdouble, |
| 3189 | .comptime_float, | 3200 | .comptime_float, |
| ... | @@ -3200,6 +3211,7 @@ pub const Type = extern union { | ... | @@ -3200,6 +3211,7 @@ pub const Type = extern union { |
| 3200 | .f16 => 16, | 3211 | .f16 => 16, |
| 3201 | .f32 => 32, | 3212 | .f32 => 32, |
| 3202 | .f64 => 64, | 3213 | .f64 => 64, |
| 3214 | .f80 => 80, | ||
| 3203 | .f128, .comptime_float => 128, | 3215 | .f128, .comptime_float => 128, |
| 3204 | .c_longdouble => CType.longdouble.sizeInBits(target), | 3216 | .c_longdouble => CType.longdouble.sizeInBits(target), |
| 3205 | 3217 | ||
| ... | @@ -3340,6 +3352,7 @@ pub const Type = extern union { | ... | @@ -3340,6 +3352,7 @@ pub const Type = extern union { |
| 3340 | .f16, | 3352 | .f16, |
| 3341 | .f32, | 3353 | .f32, |
| 3342 | .f64, | 3354 | .f64, |
| 3355 | .f80, | ||
| 3343 | .f128, | 3356 | .f128, |
| 3344 | .c_longdouble, | 3357 | .c_longdouble, |
| 3345 | .comptime_int, | 3358 | .comptime_int, |
| ... | @@ -3381,6 +3394,7 @@ pub const Type = extern union { | ... | @@ -3381,6 +3394,7 @@ pub const Type = extern union { |
| 3381 | .f16, | 3394 | .f16, |
| 3382 | .f32, | 3395 | .f32, |
| 3383 | .f64, | 3396 | .f64, |
| 3397 | .f80, | ||
| 3384 | .f128, | 3398 | .f128, |
| 3385 | .c_longdouble, | 3399 | .c_longdouble, |
| 3386 | .comptime_int, | 3400 | .comptime_int, |
| ... | @@ -3579,6 +3593,7 @@ pub const Type = extern union { | ... | @@ -3579,6 +3593,7 @@ pub const Type = extern union { |
| 3579 | .f16, | 3593 | .f16, |
| 3580 | .f32, | 3594 | .f32, |
| 3581 | .f64, | 3595 | .f64, |
| 3596 | .f80, | ||
| 3582 | .f128, | 3597 | .f128, |
| 3583 | .anyopaque, | 3598 | .anyopaque, |
| 3584 | .bool, | 3599 | .bool, |
| ... | @@ -4334,6 +4349,7 @@ pub const Type = extern union { | ... | @@ -4334,6 +4349,7 @@ pub const Type = extern union { |
| 4334 | f16, | 4349 | f16, |
| 4335 | f32, | 4350 | f32, |
| 4336 | f64, | 4351 | f64, |
| 4352 | f80, | ||
| 4337 | f128, | 4353 | f128, |
| 4338 | anyopaque, | 4354 | anyopaque, |
| 4339 | bool, | 4355 | bool, |
| ... | @@ -4453,6 +4469,7 @@ pub const Type = extern union { | ... | @@ -4453,6 +4469,7 @@ pub const Type = extern union { |
| 4453 | .f16, | 4469 | .f16, |
| 4454 | .f32, | 4470 | .f32, |
| 4455 | .f64, | 4471 | .f64, |
| 4472 | .f80, | ||
| 4456 | .f128, | 4473 | .f128, |
| 4457 | .anyopaque, | 4474 | .anyopaque, |
| 4458 | .bool, | 4475 | .bool, |
src/value.zig+5| ... | @@ -47,6 +47,7 @@ pub const Value = extern union { | ... | @@ -47,6 +47,7 @@ pub const Value = extern union { |
| 47 | f16_type, | 47 | f16_type, |
| 48 | f32_type, | 48 | f32_type, |
| 49 | f64_type, | 49 | f64_type, |
| 50 | f80_type, | ||
| 50 | f128_type, | 51 | f128_type, |
| 51 | anyopaque_type, | 52 | anyopaque_type, |
| 52 | bool_type, | 53 | bool_type, |
| ... | @@ -205,6 +206,7 @@ pub const Value = extern union { | ... | @@ -205,6 +206,7 @@ pub const Value = extern union { |
| 205 | .f16_type, | 206 | .f16_type, |
| 206 | .f32_type, | 207 | .f32_type, |
| 207 | .f64_type, | 208 | .f64_type, |
| 209 | .f80_type, | ||
| 208 | .f128_type, | 210 | .f128_type, |
| 209 | .anyopaque_type, | 211 | .anyopaque_type, |
| 210 | .bool_type, | 212 | .bool_type, |
| ... | @@ -398,6 +400,7 @@ pub const Value = extern union { | ... | @@ -398,6 +400,7 @@ pub const Value = extern union { |
| 398 | .f16_type, | 400 | .f16_type, |
| 399 | .f32_type, | 401 | .f32_type, |
| 400 | .f64_type, | 402 | .f64_type, |
| 403 | .f80_type, | ||
| 401 | .f128_type, | 404 | .f128_type, |
| 402 | .anyopaque_type, | 405 | .anyopaque_type, |
| 403 | .bool_type, | 406 | .bool_type, |
| ... | @@ -630,6 +633,7 @@ pub const Value = extern union { | ... | @@ -630,6 +633,7 @@ pub const Value = extern union { |
| 630 | .f16_type => return out_stream.writeAll("f16"), | 633 | .f16_type => return out_stream.writeAll("f16"), |
| 631 | .f32_type => return out_stream.writeAll("f32"), | 634 | .f32_type => return out_stream.writeAll("f32"), |
| 632 | .f64_type => return out_stream.writeAll("f64"), | 635 | .f64_type => return out_stream.writeAll("f64"), |
| 636 | .f80_type => return out_stream.writeAll("f80"), | ||
| 633 | .f128_type => return out_stream.writeAll("f128"), | 637 | .f128_type => return out_stream.writeAll("f128"), |
| 634 | .anyopaque_type => return out_stream.writeAll("anyopaque"), | 638 | .anyopaque_type => return out_stream.writeAll("anyopaque"), |
| 635 | .bool_type => return out_stream.writeAll("bool"), | 639 | .bool_type => return out_stream.writeAll("bool"), |
| ... | @@ -824,6 +828,7 @@ pub const Value = extern union { | ... | @@ -824,6 +828,7 @@ pub const Value = extern union { |
| 824 | .f16_type => Type.initTag(.f16), | 828 | .f16_type => Type.initTag(.f16), |
| 825 | .f32_type => Type.initTag(.f32), | 829 | .f32_type => Type.initTag(.f32), |
| 826 | .f64_type => Type.initTag(.f64), | 830 | .f64_type => Type.initTag(.f64), |
| 831 | .f80_type => Type.initTag(.f80), | ||
| 827 | .f128_type => Type.initTag(.f128), | 832 | .f128_type => Type.initTag(.f128), |
| 828 | .anyopaque_type => Type.initTag(.anyopaque), | 833 | .anyopaque_type => Type.initTag(.anyopaque), |
| 829 | .bool_type => Type.initTag(.bool), | 834 | .bool_type => Type.initTag(.bool), |