Hi Joseph, on 2022/12/22 05:40, Joseph Myers wrote: > On Wed, 21 Dec 2022, Segher Boessenkool wrote: > >>> --- a/gcc/tree.cc >>> +++ b/gcc/tree.cc >>> @@ -9442,15 +9442,6 @@ build_common_tree_nodes (bool signed_char) >>> if (!targetm.floatn_mode (n, extended).exists (&mode)) >>> continue; >>> int precision = GET_MODE_PRECISION (mode); >>> - /* Work around the rs6000 KFmode having precision 113 not >>> - 128. */ >> >> It has precision 126 now fwiw. >> >> Joseph: what do you think about this patch? Is the workaround it >> removes still useful in any way, do we need to do that some other way if >> we remove this? > > I think it's best for the TYPE_PRECISION, for any type with the binary128 > format, to be 128 (not 126).
I agree that it's more reasonable to use 128 for it (all of them) eventually, but what I thought is that if we can get rid of this workaround first to make the bootstrapping survive. Commit r9-1302-g6a8886e45f7eb6 makes TFmode/ KFmode/IFmode have different precisions with some reasons, Jakub mentioned commit r13-3292, I think later we can refer to it and have a try to unique those modes to have the same precisions (probably next stage1), I guess Mike may have more insightful comments here. > > It's necessary that _Float128, _Float64x and long double all have the same > TYPE_PRECISION when they have the same (binary128) format, or at least > that TYPE_PRECISION for _Float128 >= that for long double >= that for > _Float64x, so that the rules in c_common_type apply properly. > a. _Float128, _Float64x and long double all have the same TYPE_PRECISION when they have the same (binary128) format. b. TYPE_PRECISION for _Float128 >= that for long double >= that for _Float64x. **Without this patch**, 1) -mabi=ieeelongdouble (these three are ieee128) _Float128 => 128 ("type => its TYPE_PRECISION") _Float64x => 128 long double => 127 // Neither a and b holds. 2) -mabi=ibmlongdouble (long double is ibm128) _Float128 => 128 _Float64x => 128 long double => 127 // a N/A, b doesn't hold. **With this patch**, 1) -mabi=ieeelongdouble _Float128 => 127 _Float64x => 127 long double => 127 // both a and b hold. 2) -mabi=ibmlongdouble _Float128 => 126 _Float64x => 126 long double => 127 // a N/A, b doesn't hold. IMHO, this patch improves the status quo slightly. BR, Kewen