authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-27 15:52:15-04:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2023-04-05 22:05:06-07:00
log243848167b753692602609888763d47898ea4ce9
tree74733d7b40154c7f55bc318418323102eed5cfab
parenta4d7b7edc1f44385e33b251bb78dbd589232aa64

compiler_rt: attempt to fix f16 abi on mac with llvm 16


3 files changed, 107 insertions(+), 90 deletions(-)

lib/compiler_rt/common.zig+1-1
...@@ -84,7 +84,7 @@ pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, _: ?...@@ -84,7 +84,7 @@ pub fn panic(msg: []const u8, error_return_trace: ?*std.builtin.StackTrace, _: ?
84pub const F16T = switch (builtin.cpu.arch) {84pub const F16T = switch (builtin.cpu.arch) {
85 .aarch64, .aarch64_be, .aarch64_32 => f16,85 .aarch64, .aarch64_be, .aarch64_32 => f16,
86 .riscv64 => if (builtin.zig_backend == .stage1) u16 else f16,86 .riscv64 => if (builtin.zig_backend == .stage1) u16 else f16,
87 .x86, .x86_64 => f16,87 .x86, .x86_64 => if (builtin.target.isDarwin()) u16 else f16,
88 else => u16,88 else => u16,
89};89};
9090
lib/zig.h+86-71
...@@ -502,6 +502,15 @@ typedef ptrdiff_t intptr_t;...@@ -502,6 +502,15 @@ typedef ptrdiff_t intptr_t;
502502
503#endif503#endif
504504
505#define zig_make_small_i8(val) INT8_C(val)
506#define zig_make_small_u8(val) UINT8_C(val)
507#define zig_make_small_i16(val) INT16_C(val)
508#define zig_make_small_u16(val) UINT16_C(val)
509#define zig_make_small_i32(val) INT32_C(val)
510#define zig_make_small_u32(val) UINT32_C(val)
511#define zig_make_small_i64(val) INT64_C(val)
512#define zig_make_small_u64(val) UINT64_C(val)
513
505#define zig_minInt_i8 INT8_MIN514#define zig_minInt_i8 INT8_MIN
506#define zig_maxInt_i8 INT8_MAX515#define zig_maxInt_i8 INT8_MAX
507#define zig_minInt_u8 UINT8_C(0)516#define zig_minInt_u8 UINT8_C(0)
...@@ -585,7 +594,7 @@ typedef ptrdiff_t intptr_t;...@@ -585,7 +594,7 @@ typedef ptrdiff_t intptr_t;
585 } \594 } \
586\595\
587 static inline int##w##_t zig_shlw_i##w(int##w##_t lhs, uint8_t rhs, uint8_t bits) { \596 static inline int##w##_t zig_shlw_i##w(int##w##_t lhs, uint8_t rhs, uint8_t bits) { \
588 return zig_wrap_i##w((int##w##_t)zig_shl_u##w((uint##w##_t)lhs, (uint##w##_t)rhs), bits); \597 return zig_wrap_i##w((int##w##_t)zig_shl_u##w((uint##w##_t)lhs, rhs), bits); \
589 } \598 } \
590\599\
591 static inline uint##w##_t zig_addw_u##w(uint##w##_t lhs, uint##w##_t rhs, uint8_t bits) { \600 static inline uint##w##_t zig_addw_u##w(uint##w##_t lhs, uint##w##_t rhs, uint8_t bits) { \
...@@ -1294,6 +1303,9 @@ typedef struct { zig_align(16) int64_t hi; uint64_t lo; } zig_i128;...@@ -1294,6 +1303,9 @@ typedef struct { zig_align(16) int64_t hi; uint64_t lo; } zig_i128;
12941303
1295#endif /* zig_has_int128 */1304#endif /* zig_has_int128 */
12961305
1306#define zig_make_small_u128(val) zig_make_u128(0, val)
1307#define zig_make_small_i128(val) zig_make_i128((val) < 0 ? -INT64_C(1) : INT64_C(0), val)
1308
1297#define zig_minInt_u128 zig_make_u128(zig_minInt_u64, zig_minInt_u64)1309#define zig_minInt_u128 zig_make_u128(zig_minInt_u64, zig_minInt_u64)
1298#define zig_maxInt_u128 zig_make_u128(zig_maxInt_u64, zig_maxInt_u64)1310#define zig_maxInt_u128 zig_make_u128(zig_maxInt_u64, zig_maxInt_u64)
1299#define zig_minInt_i128 zig_make_i128(zig_minInt_i64, zig_minInt_u64)1311#define zig_minInt_i128 zig_make_i128(zig_minInt_i64, zig_minInt_u64)
...@@ -2828,7 +2840,7 @@ static inline uint16_t zig_popcount_big(const void *val, bool is_signed, uint16_...@@ -2828,7 +2840,7 @@ static inline uint16_t zig_popcount_big(const void *val, bool is_signed, uint16_
28282840
2829#define zig_has_f16 12841#define zig_has_f16 1
2830#define zig_bitSizeOf_f16 162842#define zig_bitSizeOf_f16 16
2831typedef int16_t zig_repr_f16;2843typedef uint16_t zig_repr_f16;
2832#define zig_libc_name_f16(name) __##name##h2844#define zig_libc_name_f16(name) __##name##h
2833#define zig_init_special_f16(sign, name, arg, repr) zig_make_special_f16(sign, name, arg, repr)2845#define zig_init_special_f16(sign, name, arg, repr) zig_make_special_f16(sign, name, arg, repr)
2834#if FLT_MANT_DIG == 112846#if FLT_MANT_DIG == 11
...@@ -2854,7 +2866,7 @@ typedef __fp16 zig_f16;...@@ -2854,7 +2866,7 @@ typedef __fp16 zig_f16;
2854#undef zig_has_f162866#undef zig_has_f16
2855#define zig_has_f16 02867#define zig_has_f16 0
2856#define zig_bitSizeOf_repr_f16 162868#define zig_bitSizeOf_repr_f16 16
2857typedef int16_t zig_f16;2869typedef zig_repr_f16 zig_f16;
2858#define zig_make_f16(fp, repr) repr2870#define zig_make_f16(fp, repr) repr
2859#undef zig_make_special_f162871#undef zig_make_special_f16
2860#define zig_make_special_f16(sign, name, arg, repr) repr2872#define zig_make_special_f16(sign, name, arg, repr) repr
...@@ -2864,7 +2876,7 @@ typedef int16_t zig_f16;...@@ -2864,7 +2876,7 @@ typedef int16_t zig_f16;
28642876
2865#define zig_has_f32 12877#define zig_has_f32 1
2866#define zig_bitSizeOf_f32 322878#define zig_bitSizeOf_f32 32
2867typedef int32_t zig_repr_f32;2879typedef uint32_t zig_repr_f32;
2868#define zig_libc_name_f32(name) name##f2880#define zig_libc_name_f32(name) name##f
2869#if _MSC_VER2881#if _MSC_VER
2870#define zig_init_special_f32(sign, name, arg, repr) sign zig_make_f32(zig_msvc_flt_##name, )2882#define zig_init_special_f32(sign, name, arg, repr) sign zig_make_f32(zig_msvc_flt_##name, )
...@@ -2891,7 +2903,7 @@ typedef _Float32 zig_f32;...@@ -2891,7 +2903,7 @@ typedef _Float32 zig_f32;
2891#undef zig_has_f322903#undef zig_has_f32
2892#define zig_has_f32 02904#define zig_has_f32 0
2893#define zig_bitSizeOf_repr_f32 322905#define zig_bitSizeOf_repr_f32 32
2894typedef int32_t zig_f32;2906typedef zig_repr_f32 zig_f32;
2895#define zig_make_f32(fp, repr) repr2907#define zig_make_f32(fp, repr) repr
2896#undef zig_make_special_f322908#undef zig_make_special_f32
2897#define zig_make_special_f32(sign, name, arg, repr) repr2909#define zig_make_special_f32(sign, name, arg, repr) repr
...@@ -2901,7 +2913,7 @@ typedef int32_t zig_f32;...@@ -2901,7 +2913,7 @@ typedef int32_t zig_f32;
29012913
2902#define zig_has_f64 12914#define zig_has_f64 1
2903#define zig_bitSizeOf_f64 642915#define zig_bitSizeOf_f64 64
2904typedef int64_t zig_repr_f64;2916typedef uint64_t zig_repr_f64;
2905#define zig_libc_name_f64(name) name2917#define zig_libc_name_f64(name) name
2906#if _MSC_VER2918#if _MSC_VER
2907#ifdef ZIG_TARGET_ABI_MSVC2919#ifdef ZIG_TARGET_ABI_MSVC
...@@ -2937,7 +2949,7 @@ typedef _Float32x zig_f64;...@@ -2937,7 +2949,7 @@ typedef _Float32x zig_f64;
2937#undef zig_has_f642949#undef zig_has_f64
2938#define zig_has_f64 02950#define zig_has_f64 0
2939#define zig_bitSizeOf_repr_f64 642951#define zig_bitSizeOf_repr_f64 64
2940typedef int64_t zig_f64;2952typedef zig_repr_f64 zig_f64;
2941#define zig_make_f64(fp, repr) repr2953#define zig_make_f64(fp, repr) repr
2942#undef zig_make_special_f642954#undef zig_make_special_f64
2943#define zig_make_special_f64(sign, name, arg, repr) repr2955#define zig_make_special_f64(sign, name, arg, repr) repr
...@@ -2947,7 +2959,7 @@ typedef int64_t zig_f64;...@@ -2947,7 +2959,7 @@ typedef int64_t zig_f64;
29472959
2948#define zig_has_f80 12960#define zig_has_f80 1
2949#define zig_bitSizeOf_f80 802961#define zig_bitSizeOf_f80 80
2950typedef zig_i128 zig_repr_f80;2962typedef zig_u128 zig_repr_f80;
2951#define zig_libc_name_f80(name) __##name##x2963#define zig_libc_name_f80(name) __##name##x
2952#define zig_init_special_f80(sign, name, arg, repr) zig_make_special_f80(sign, name, arg, repr)2964#define zig_init_special_f80(sign, name, arg, repr) zig_make_special_f80(sign, name, arg, repr)
2953#if FLT_MANT_DIG == 642965#if FLT_MANT_DIG == 64
...@@ -2976,7 +2988,7 @@ typedef __float80 zig_f80;...@@ -2976,7 +2988,7 @@ typedef __float80 zig_f80;
2976#undef zig_has_f802988#undef zig_has_f80
2977#define zig_has_f80 02989#define zig_has_f80 0
2978#define zig_bitSizeOf_repr_f80 1282990#define zig_bitSizeOf_repr_f80 128
2979typedef zig_i128 zig_f80;2991typedef zig_repr_f80 zig_f80;
2980#define zig_make_f80(fp, repr) repr2992#define zig_make_f80(fp, repr) repr
2981#undef zig_make_special_f802993#undef zig_make_special_f80
2982#define zig_make_special_f80(sign, name, arg, repr) repr2994#define zig_make_special_f80(sign, name, arg, repr) repr
...@@ -2986,7 +2998,7 @@ typedef zig_i128 zig_f80;...@@ -2986,7 +2998,7 @@ typedef zig_i128 zig_f80;
29862998
2987#define zig_has_f128 12999#define zig_has_f128 1
2988#define zig_bitSizeOf_f128 1283000#define zig_bitSizeOf_f128 128
2989typedef zig_i128 zig_repr_f128;3001typedef zig_u128 zig_repr_f128;
2990#define zig_libc_name_f128(name) name##q3002#define zig_libc_name_f128(name) name##q
2991#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)3003#define zig_init_special_f128(sign, name, arg, repr) zig_make_special_f128(sign, name, arg, repr)
2992#if FLT_MANT_DIG == 1133004#if FLT_MANT_DIG == 113
...@@ -3017,7 +3029,7 @@ typedef __float128 zig_f128;...@@ -3017,7 +3029,7 @@ typedef __float128 zig_f128;
3017#undef zig_has_f1283029#undef zig_has_f128
3018#define zig_has_f128 03030#define zig_has_f128 0
3019#define zig_bitSizeOf_repr_f128 1283031#define zig_bitSizeOf_repr_f128 128
3020typedef zig_i128 zig_f128;3032typedef zig_repr_f128 zig_f128;
3021#define zig_make_f128(fp, repr) repr3033#define zig_make_f128(fp, repr) repr
3022#undef zig_make_special_f1283034#undef zig_make_special_f128
3023#define zig_make_special_f128(sign, name, arg, repr) repr3035#define zig_make_special_f128(sign, name, arg, repr) repr
...@@ -3097,15 +3109,18 @@ zig_convert_builtin(zig_f128, extend, zig_f32, 2)...@@ -3097,15 +3109,18 @@ zig_convert_builtin(zig_f128, extend, zig_f32, 2)
3097zig_convert_builtin(zig_f128, extend, zig_f64, 2)3109zig_convert_builtin(zig_f128, extend, zig_f64, 2)
3098zig_convert_builtin(zig_f128, extend, zig_f80, 2)3110zig_convert_builtin(zig_f128, extend, zig_f80, 2)
30993111
3100#define zig_float_negate_builtin_0(Type) \3112#define zig_float_negate_builtin_0(w) \
3101 static inline zig_##Type zig_neg_##Type(zig_##Type arg) { \3113 static inline zig_f##w zig_neg_f##w(zig_f##w arg) { \
3102 return zig_expand_concat(zig_xor_i, zig_bitSizeOf_repr_##Type)( \3114 return zig_expand_concat(zig_xor_u, zig_bitSizeOf_repr_f##w)( \
3103 arg, \3115 arg, \
3104 zig_minInt_i(zig_bitSizeOf_repr_##Type, zig_bitSizeOf_##Type) \3116 zig_expand_concat(zig_shl_u, zig_bitSizeOf_repr_f##w)( \
3117 zig_expand_concat(zig_make_small_u, zig_bitSizeOf_repr_f##w)(1), \
3118 UINT8_C(w - 1) \
3119 ) \
3105 ); \3120 ); \
3106 }3121 }
3107#define zig_float_negate_builtin_1(Type) \3122#define zig_float_negate_builtin_1(w) \
3108 static inline zig_##Type zig_neg_##Type(zig_##Type arg) { \3123 static inline zig_f##w zig_neg_f##w(zig_f##w arg) { \
3109 return -arg; \3124 return -arg; \
3110 }3125 }
31113126
...@@ -3138,66 +3153,66 @@ zig_convert_builtin(zig_f128, extend, zig_f80, 2)...@@ -3138,66 +3153,66 @@ zig_convert_builtin(zig_f128, extend, zig_f80, 2)
3138 return lhs operator rhs; \3153 return lhs operator rhs; \
3139 }3154 }
31403155
3141#define zig_float_builtins(Type) \3156#define zig_float_builtins(w) \
3142 zig_convert_builtin( int32_t, fix, zig_##Type, ) \3157 zig_convert_builtin( int32_t, fix, zig_f##w, ) \
3143 zig_convert_builtin(uint32_t, fixuns, zig_##Type, ) \3158 zig_convert_builtin(uint32_t, fixuns, zig_f##w, ) \
3144 zig_convert_builtin( int64_t, fix, zig_##Type, ) \3159 zig_convert_builtin( int64_t, fix, zig_f##w, ) \
3145 zig_convert_builtin(uint64_t, fixuns, zig_##Type, ) \3160 zig_convert_builtin(uint64_t, fixuns, zig_f##w, ) \
3146 zig_convert_builtin(zig_i128, fix, zig_##Type, ) \3161 zig_convert_builtin(zig_i128, fix, zig_f##w, ) \
3147 zig_convert_builtin(zig_u128, fixuns, zig_##Type, ) \3162 zig_convert_builtin(zig_u128, fixuns, zig_f##w, ) \
3148 zig_convert_builtin(zig_##Type, float, int32_t, ) \3163 zig_convert_builtin(zig_f##w, float, int32_t, ) \
3149 zig_convert_builtin(zig_##Type, floatun, uint32_t, ) \3164 zig_convert_builtin(zig_f##w, floatun, uint32_t, ) \
3150 zig_convert_builtin(zig_##Type, float, int64_t, ) \3165 zig_convert_builtin(zig_f##w, float, int64_t, ) \
3151 zig_convert_builtin(zig_##Type, floatun, uint64_t, ) \3166 zig_convert_builtin(zig_f##w, floatun, uint64_t, ) \
3152 zig_convert_builtin(zig_##Type, float, zig_i128, ) \3167 zig_convert_builtin(zig_f##w, float, zig_i128, ) \
3153 zig_convert_builtin(zig_##Type, floatun, zig_u128, ) \3168 zig_convert_builtin(zig_f##w, floatun, zig_u128, ) \
3154 zig_expand_concat(zig_float_negate_builtin_, zig_has_##Type)(Type) \3169 zig_expand_concat(zig_float_negate_builtin_, zig_has_f##w)(w) \
3155 zig_expand_concat(zig_float_less_builtin_, zig_has_##Type)(Type, cmp) \3170 zig_expand_concat(zig_float_less_builtin_, zig_has_f##w)(f##w, cmp) \
3156 zig_expand_concat(zig_float_less_builtin_, zig_has_##Type)(Type, ne) \3171 zig_expand_concat(zig_float_less_builtin_, zig_has_f##w)(f##w, ne) \
3157 zig_expand_concat(zig_float_less_builtin_, zig_has_##Type)(Type, eq) \3172 zig_expand_concat(zig_float_less_builtin_, zig_has_f##w)(f##w, eq) \
3158 zig_expand_concat(zig_float_less_builtin_, zig_has_##Type)(Type, lt) \3173 zig_expand_concat(zig_float_less_builtin_, zig_has_f##w)(f##w, lt) \
3159 zig_expand_concat(zig_float_less_builtin_, zig_has_##Type)(Type, le) \3174 zig_expand_concat(zig_float_less_builtin_, zig_has_f##w)(f##w, le) \
3160 zig_expand_concat(zig_float_greater_builtin_, zig_has_##Type)(Type, gt) \3175 zig_expand_concat(zig_float_greater_builtin_, zig_has_f##w)(f##w, gt) \
3161 zig_expand_concat(zig_float_greater_builtin_, zig_has_##Type)(Type, ge) \3176 zig_expand_concat(zig_float_greater_builtin_, zig_has_f##w)(f##w, ge) \
3162 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, add, +) \3177 zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, add, +) \
3163 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, sub, -) \3178 zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, sub, -) \
3164 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, mul, *) \3179 zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, mul, *) \
3165 zig_expand_concat(zig_float_binary_builtin_, zig_has_##Type)(Type, div, /) \3180 zig_expand_concat(zig_float_binary_builtin_, zig_has_f##w)(f##w, div, /) \
3166 zig_extern zig_##Type zig_libc_name_##Type(sqrt)(zig_##Type); \3181 zig_extern zig_f##w zig_libc_name_f##w(sqrt)(zig_f##w); \
3167 zig_extern zig_##Type zig_libc_name_##Type(sin)(zig_##Type); \3182 zig_extern zig_f##w zig_libc_name_f##w(sin)(zig_f##w); \
3168 zig_extern zig_##Type zig_libc_name_##Type(cos)(zig_##Type); \3183 zig_extern zig_f##w zig_libc_name_f##w(cos)(zig_f##w); \
3169 zig_extern zig_##Type zig_libc_name_##Type(tan)(zig_##Type); \3184 zig_extern zig_f##w zig_libc_name_f##w(tan)(zig_f##w); \
3170 zig_extern zig_##Type zig_libc_name_##Type(exp)(zig_##Type); \3185 zig_extern zig_f##w zig_libc_name_f##w(exp)(zig_f##w); \
3171 zig_extern zig_##Type zig_libc_name_##Type(exp2)(zig_##Type); \3186 zig_extern zig_f##w zig_libc_name_f##w(exp2)(zig_f##w); \
3172 zig_extern zig_##Type zig_libc_name_##Type(log)(zig_##Type); \3187 zig_extern zig_f##w zig_libc_name_f##w(log)(zig_f##w); \
3173 zig_extern zig_##Type zig_libc_name_##Type(log2)(zig_##Type); \3188 zig_extern zig_f##w zig_libc_name_f##w(log2)(zig_f##w); \
3174 zig_extern zig_##Type zig_libc_name_##Type(log10)(zig_##Type); \3189 zig_extern zig_f##w zig_libc_name_f##w(log10)(zig_f##w); \
3175 zig_extern zig_##Type zig_libc_name_##Type(fabs)(zig_##Type); \3190 zig_extern zig_f##w zig_libc_name_f##w(fabs)(zig_f##w); \
3176 zig_extern zig_##Type zig_libc_name_##Type(floor)(zig_##Type); \3191 zig_extern zig_f##w zig_libc_name_f##w(floor)(zig_f##w); \
3177 zig_extern zig_##Type zig_libc_name_##Type(ceil)(zig_##Type); \3192 zig_extern zig_f##w zig_libc_name_f##w(ceil)(zig_f##w); \
3178 zig_extern zig_##Type zig_libc_name_##Type(round)(zig_##Type); \3193 zig_extern zig_f##w zig_libc_name_f##w(round)(zig_f##w); \
3179 zig_extern zig_##Type zig_libc_name_##Type(trunc)(zig_##Type); \3194 zig_extern zig_f##w zig_libc_name_f##w(trunc)(zig_f##w); \
3180 zig_extern zig_##Type zig_libc_name_##Type(fmod)(zig_##Type, zig_##Type); \3195 zig_extern zig_f##w zig_libc_name_f##w(fmod)(zig_f##w, zig_f##w); \
3181 zig_extern zig_##Type zig_libc_name_##Type(fmin)(zig_##Type, zig_##Type); \3196 zig_extern zig_f##w zig_libc_name_f##w(fmin)(zig_f##w, zig_f##w); \
3182 zig_extern zig_##Type zig_libc_name_##Type(fmax)(zig_##Type, zig_##Type); \3197 zig_extern zig_f##w zig_libc_name_f##w(fmax)(zig_f##w, zig_f##w); \
3183 zig_extern zig_##Type zig_libc_name_##Type(fma)(zig_##Type, zig_##Type, zig_##Type); \3198 zig_extern zig_f##w zig_libc_name_f##w(fma)(zig_f##w, zig_f##w, zig_f##w); \
3184\3199\
3185 static inline zig_##Type zig_div_trunc_##Type(zig_##Type lhs, zig_##Type rhs) { \3200 static inline zig_f##w zig_div_trunc_f##w(zig_f##w lhs, zig_f##w rhs) { \
3186 return zig_libc_name_##Type(trunc)(zig_div_##Type(lhs, rhs)); \3201 return zig_libc_name_f##w(trunc)(zig_div_f##w(lhs, rhs)); \
3187 } \3202 } \
3188\3203\
3189 static inline zig_##Type zig_div_floor_##Type(zig_##Type lhs, zig_##Type rhs) { \3204 static inline zig_f##w zig_div_floor_f##w(zig_f##w lhs, zig_f##w rhs) { \
3190 return zig_libc_name_##Type(floor)(zig_div_##Type(lhs, rhs)); \3205 return zig_libc_name_f##w(floor)(zig_div_f##w(lhs, rhs)); \
3191 } \3206 } \
3192\3207\
3193 static inline zig_##Type zig_mod_##Type(zig_##Type lhs, zig_##Type rhs) { \3208 static inline zig_f##w zig_mod_f##w(zig_f##w lhs, zig_f##w rhs) { \
3194 return zig_sub_##Type(lhs, zig_mul_##Type(zig_div_floor_##Type(lhs, rhs), rhs)); \3209 return zig_sub_f##w(lhs, zig_mul_f##w(zig_div_floor_f##w(lhs, rhs), rhs)); \
3195 }3210 }
3196zig_float_builtins(f16)3211zig_float_builtins(16)
3197zig_float_builtins(f32)3212zig_float_builtins(32)
3198zig_float_builtins(f64)3213zig_float_builtins(64)
3199zig_float_builtins(f80)3214zig_float_builtins(80)
3200zig_float_builtins(f128)3215zig_float_builtins(128)
32013216
3202#if _MSC_VER && (_M_IX86 || _M_X64)3217#if _MSC_VER && (_M_IX86 || _M_X64)
32033218
src/codegen/c.zig+20-18
...@@ -751,8 +751,8 @@ pub const DeclGen = struct {...@@ -751,8 +751,8 @@ pub const DeclGen = struct {
751 .Int, .Enum, .ErrorSet => return writer.print("{x}", .{try dg.fmtIntLiteral(ty, val, location)}),751 .Int, .Enum, .ErrorSet => return writer.print("{x}", .{try dg.fmtIntLiteral(ty, val, location)}),
752 .Float => {752 .Float => {
753 const bits = ty.floatBits(target);753 const bits = ty.floatBits(target);
754 var int_pl = Type.Payload.Bits{ .base = .{ .tag = .int_signed }, .data = bits };754 var repr_pl = Type.Payload.Bits{ .base = .{ .tag = .int_unsigned }, .data = bits };
755 const int_ty = Type.initPayload(&int_pl.base);755 const repr_ty = Type.initPayload(&repr_pl.base);
756756
757 try writer.writeAll("zig_cast_");757 try writer.writeAll("zig_cast_");
758 try dg.renderTypeForBuiltinFnName(writer, ty);758 try dg.renderTypeForBuiltinFnName(writer, ty);
...@@ -768,7 +768,7 @@ pub const DeclGen = struct {...@@ -768,7 +768,7 @@ pub const DeclGen = struct {
768 else => unreachable,768 else => unreachable,
769 }769 }
770 try writer.writeAll(", ");770 try writer.writeAll(", ");
771 try dg.renderValue(writer, int_ty, Value.undef, .FunctionArgument);771 try dg.renderValue(writer, repr_ty, Value.undef, .FunctionArgument);
772 return writer.writeByte(')');772 return writer.writeByte(')');
773 },773 },
774 .Pointer => if (ty.isSlice()) {774 .Pointer => if (ty.isSlice()) {
...@@ -935,31 +935,33 @@ pub const DeclGen = struct {...@@ -935,31 +935,33 @@ pub const DeclGen = struct {
935 const bits = ty.floatBits(target);935 const bits = ty.floatBits(target);
936 const f128_val = val.toFloat(f128);936 const f128_val = val.toFloat(f128);
937937
938 var int_ty_pl = Type.Payload.Bits{ .base = .{ .tag = .int_signed }, .data = bits };938 var repr_ty_pl = Type.Payload.Bits{ .base = .{ .tag = .int_unsigned }, .data = bits };
939 const int_ty = Type.initPayload(&int_ty_pl.base);939 const repr_ty = Type.initPayload(&repr_ty_pl.base);
940940
941 assert(bits <= 128);941 assert(bits <= 128);
942 var int_val_limbs: [BigInt.calcTwosCompLimbCount(128)]BigIntLimb = undefined;942 var repr_val_limbs: [BigInt.calcTwosCompLimbCount(128)]BigIntLimb = undefined;
943 var int_val_big = BigInt.Mutable{943 var repr_val_big = BigInt.Mutable{
944 .limbs = &int_val_limbs,944 .limbs = &repr_val_limbs,
945 .len = undefined,945 .len = undefined,
946 .positive = undefined,946 .positive = undefined,
947 };947 };
948948
949 switch (bits) {949 switch (bits) {
950 16 => int_val_big.set(@bitCast(i16, val.toFloat(f16))),950 16 => repr_val_big.set(@bitCast(u16, val.toFloat(f16))),
951 32 => int_val_big.set(@bitCast(i32, val.toFloat(f32))),951 32 => repr_val_big.set(@bitCast(u32, val.toFloat(f32))),
952 64 => int_val_big.set(@bitCast(i64, val.toFloat(f64))),952 64 => repr_val_big.set(@bitCast(u64, val.toFloat(f64))),
953 80 => int_val_big.set(@bitCast(i80, val.toFloat(f80))),953 80 => repr_val_big.set(@bitCast(u80, val.toFloat(f80))),
954 128 => int_val_big.set(@bitCast(i128, f128_val)),954 128 => repr_val_big.set(@bitCast(u128, f128_val)),
955 else => unreachable,955 else => unreachable,
956 }956 }
957957
958 var int_val_pl = Value.Payload.BigInt{958 var repr_val_pl = Value.Payload.BigInt{
959 .base = .{ .tag = if (int_val_big.positive) .int_big_positive else .int_big_negative },959 .base = .{
960 .data = int_val_big.limbs[0..int_val_big.len],960 .tag = if (repr_val_big.positive) .int_big_positive else .int_big_negative,
961 },
962 .data = repr_val_big.limbs[0..repr_val_big.len],
961 };963 };
962 const int_val = Value.initPayload(&int_val_pl.base);964 const repr_val = Value.initPayload(&repr_val_pl.base);
963965
964 try writer.writeAll("zig_cast_");966 try writer.writeAll("zig_cast_");
965 try dg.renderTypeForBuiltinFnName(writer, ty);967 try dg.renderTypeForBuiltinFnName(writer, ty);
...@@ -1023,7 +1025,7 @@ pub const DeclGen = struct {...@@ -1023,7 +1025,7 @@ pub const DeclGen = struct {
1023 try writer.writeAll(", ");1025 try writer.writeAll(", ");
1024 empty = false;1026 empty = false;
1025 }1027 }
1026 try writer.print("{x}", .{try dg.fmtIntLiteral(int_ty, int_val, location)});1028 try writer.print("{x}", .{try dg.fmtIntLiteral(repr_ty, repr_val, location)});
1027 if (!empty) try writer.writeByte(')');1029 if (!empty) try writer.writeByte(')');
1028 return;1030 return;
1029 },1031 },