authorgravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-06 20:38:57-07:00
committergravatar for andrew@ziglang.orgAndrew Kelley <andrew@ziglang.org> 2022-02-06 20:38:57-07:00
logeb82fdf96c3392ec9eabacbaa98c976f9ccd264e
treeb8d80ee2a26d70616eb1d47f4c833f408f322a50
parent65b6faa0485253b284f7a63601dc7d0f5858515a

Sema: panic instead of lowering to unavailable compiler-rt functions

Once the relevant compiler_rt functions are implemented, these panics can be removed.

1 files changed, 28 insertions(+), 2 deletions(-)

src/value.zig+28-2
...@@ -1423,8 +1423,10 @@ pub const Value = extern union {...@@ -1423,8 +1423,10 @@ pub const Value = extern union {
1423 .float_16 => @rem(self.castTag(.float_16).?.data, 1) != 0,1423 .float_16 => @rem(self.castTag(.float_16).?.data, 1) != 0,
1424 .float_32 => @rem(self.castTag(.float_32).?.data, 1) != 0,1424 .float_32 => @rem(self.castTag(.float_32).?.data, 1) != 0,
1425 .float_64 => @rem(self.castTag(.float_64).?.data, 1) != 0,1425 .float_64 => @rem(self.castTag(.float_64).?.data, 1) != 0,
1426 .float_80 => @rem(self.castTag(.float_80).?.data, 1) != 0,1426 //.float_80 => @rem(self.castTag(.float_80).?.data, 1) != 0,
1427 .float_128 => @rem(self.castTag(.float_128).?.data, 1) != 0,1427 .float_80 => @panic("TODO implement __remx in compiler-rt"),
1428 //.float_128 => @rem(self.castTag(.float_128).?.data, 1) != 0,
1429 .float_128 => @panic("TODO implement fmodl in compiler-rt"),
14281430
1429 else => unreachable,1431 else => unreachable,
1430 };1432 };
...@@ -2819,11 +2821,17 @@ pub const Value = extern union {...@@ -2819,11 +2821,17 @@ pub const Value = extern union {
2819 return Value.Tag.float_64.create(arena, @rem(lhs_val, rhs_val));2821 return Value.Tag.float_64.create(arena, @rem(lhs_val, rhs_val));
2820 },2822 },
2821 80 => {2823 80 => {
2824 if (true) {
2825 @panic("TODO implement compiler_rt __remx");
2826 }
2822 const lhs_val = lhs.toFloat(f80);2827 const lhs_val = lhs.toFloat(f80);
2823 const rhs_val = rhs.toFloat(f80);2828 const rhs_val = rhs.toFloat(f80);
2824 return Value.Tag.float_80.create(arena, @rem(lhs_val, rhs_val));2829 return Value.Tag.float_80.create(arena, @rem(lhs_val, rhs_val));
2825 },2830 },
2826 128 => {2831 128 => {
2832 if (true) {
2833 @panic("TODO implement compiler_rt fmodl");
2834 }
2827 const lhs_val = lhs.toFloat(f128);2835 const lhs_val = lhs.toFloat(f128);
2828 const rhs_val = rhs.toFloat(f128);2836 const rhs_val = rhs.toFloat(f128);
2829 return Value.Tag.float_128.create(arena, @rem(lhs_val, rhs_val));2837 return Value.Tag.float_128.create(arena, @rem(lhs_val, rhs_val));
...@@ -2850,11 +2858,17 @@ pub const Value = extern union {...@@ -2850,11 +2858,17 @@ pub const Value = extern union {
2850 return Value.Tag.float_64.create(arena, @mod(lhs_val, rhs_val));2858 return Value.Tag.float_64.create(arena, @mod(lhs_val, rhs_val));
2851 },2859 },
2852 80 => {2860 80 => {
2861 if (true) {
2862 @panic("TODO implement compiler_rt __modx");
2863 }
2853 const lhs_val = lhs.toFloat(f80);2864 const lhs_val = lhs.toFloat(f80);
2854 const rhs_val = rhs.toFloat(f80);2865 const rhs_val = rhs.toFloat(f80);
2855 return Value.Tag.float_80.create(arena, @mod(lhs_val, rhs_val));2866 return Value.Tag.float_80.create(arena, @mod(lhs_val, rhs_val));
2856 },2867 },
2857 128 => {2868 128 => {
2869 if (true) {
2870 @panic("TODO implement compiler_rt fmodl");
2871 }
2858 const lhs_val = lhs.toFloat(f128);2872 const lhs_val = lhs.toFloat(f128);
2859 const rhs_val = rhs.toFloat(f128);2873 const rhs_val = rhs.toFloat(f128);
2860 return Value.Tag.float_128.create(arena, @mod(lhs_val, rhs_val));2874 return Value.Tag.float_128.create(arena, @mod(lhs_val, rhs_val));
...@@ -3113,6 +3127,9 @@ pub const Value = extern union {...@@ -3113,6 +3127,9 @@ pub const Value = extern union {
3113 return Value.Tag.float_64.create(arena, lhs_val / rhs_val);3127 return Value.Tag.float_64.create(arena, lhs_val / rhs_val);
3114 },3128 },
3115 80 => {3129 80 => {
3130 if (true) {
3131 @panic("TODO implement compiler_rt __divxf3");
3132 }
3116 const lhs_val = lhs.toFloat(f80);3133 const lhs_val = lhs.toFloat(f80);
3117 const rhs_val = rhs.toFloat(f80);3134 const rhs_val = rhs.toFloat(f80);
3118 return Value.Tag.float_80.create(arena, lhs_val / rhs_val);3135 return Value.Tag.float_80.create(arena, lhs_val / rhs_val);
...@@ -3150,6 +3167,9 @@ pub const Value = extern union {...@@ -3150,6 +3167,9 @@ pub const Value = extern union {
3150 return Value.Tag.float_64.create(arena, @divFloor(lhs_val, rhs_val));3167 return Value.Tag.float_64.create(arena, @divFloor(lhs_val, rhs_val));
3151 },3168 },
3152 80 => {3169 80 => {
3170 if (true) {
3171 @panic("TODO implement compiler_rt __floorx");
3172 }
3153 const lhs_val = lhs.toFloat(f80);3173 const lhs_val = lhs.toFloat(f80);
3154 const rhs_val = rhs.toFloat(f80);3174 const rhs_val = rhs.toFloat(f80);
3155 return Value.Tag.float_80.create(arena, @divFloor(lhs_val, rhs_val));3175 return Value.Tag.float_80.create(arena, @divFloor(lhs_val, rhs_val));
...@@ -3187,6 +3207,9 @@ pub const Value = extern union {...@@ -3187,6 +3207,9 @@ pub const Value = extern union {
3187 return Value.Tag.float_64.create(arena, @divTrunc(lhs_val, rhs_val));3207 return Value.Tag.float_64.create(arena, @divTrunc(lhs_val, rhs_val));
3188 },3208 },
3189 80 => {3209 80 => {
3210 if (true) {
3211 @panic("TODO implement compiler_rt __truncx");
3212 }
3190 const lhs_val = lhs.toFloat(f80);3213 const lhs_val = lhs.toFloat(f80);
3191 const rhs_val = rhs.toFloat(f80);3214 const rhs_val = rhs.toFloat(f80);
3192 return Value.Tag.float_80.create(arena, @divTrunc(lhs_val, rhs_val));3215 return Value.Tag.float_80.create(arena, @divTrunc(lhs_val, rhs_val));
...@@ -3224,6 +3247,9 @@ pub const Value = extern union {...@@ -3224,6 +3247,9 @@ pub const Value = extern union {
3224 return Value.Tag.float_64.create(arena, lhs_val * rhs_val);3247 return Value.Tag.float_64.create(arena, lhs_val * rhs_val);
3225 },3248 },
3226 80 => {3249 80 => {
3250 if (true) {
3251 @panic("TODO implement compiler_rt __mulxf3");
3252 }
3227 const lhs_val = lhs.toFloat(f80);3253 const lhs_val = lhs.toFloat(f80);
3228 const rhs_val = rhs.toFloat(f80);3254 const rhs_val = rhs.toFloat(f80);
3229 return Value.Tag.float_80.create(arena, lhs_val * rhs_val);3255 return Value.Tag.float_80.create(arena, lhs_val * rhs_val);