[MCOL-4511] __float128 type is not supported on aarch64 Created: 2021-01-22  Updated: 2021-03-01  Resolved: 2021-03-01

Status: Closed
Project: MariaDB ColumnStore
Component/s: Build
Affects Version/s: 6.1.1
Fix Version/s: 6.1.1

Type: Task Priority: Major
Reporter: Zhao Renhai Assignee: Roman
Resolution: Fixed Votes: 0
Labels: None


 Description   

build output:

[ 32%] Building CXX object storage/columnstore/columnstore/utils/common/CMakeFiles/common.dir/fixedallocator.cpp.o
[ 32%] Building CXX object storage/columnstore/columnstore/utils/common/CMakeFiles/common.dir/poolallocator.cpp.o
[ 32%] Building CXX object storage/columnstore/columnstore/utils/common/CMakeFiles/common.dir/cgroupconfigurator.cpp.o
[ 32%] Building CXX object storage/columnstore/columnstore/utils/common/CMakeFiles/common.dir/MonitorProcMem.cpp.o
[ 32%] Building CXX object storage/columnstore/columnstore/utils/common/CMakeFiles/common.dir/nullvaluemanip.cpp.o
In file included from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_int128.h:27:0,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_decimal.h:28,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_datatype.h:25,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/../../dbcon/execplan/calpontsystemcatalog.h:52,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.h:22,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.cpp:20:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:33:3: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
   __float128 value;
   ^~~~~~~~~~
   _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:94:14: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
 static const __float128 mcs_fl_one = 1.0, mcs_fl_Zero[] = {0.0, -0.0,};
              ^~~~~~~~~~
              _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:99:33: error: ‘__float128’ was not declared in this scope
 template<> class numeric_limits<__float128> {
                                 ^~~~~~~~~~
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:99:33: note: suggested alternative: ‘_Float128’
 template<> class numeric_limits<__float128> {
                                 ^~~~~~~~~~
                                 _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:99:43: error: template argument 1 is invalid
 template<> class numeric_limits<__float128> {
                                           ^
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:165:11: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
   typedef __float128 type;
           ^~~~~~~~~~
           _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:184:21: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     TFloat128(const __float128& x) { value = x; }
                     ^~~~~~~~~~
                     _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:190:12: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     static __float128 fmodq (__float128& x, __float128& y)
            ^~~~~~~~~~
            _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:297:19: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     static inline __float128 pown(const __float128& x, const int p)
                   ^~~~~~~~~~
                   _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:371:12: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     static __float128 fromString(const std::string& str)
            ^~~~~~~~~~
            _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:623:5: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     __float128 value;
     ^~~~~~~~~~
     _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h: In constructor ‘datatypes::TFloat128::TFloat128()’:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:181:18: error: class ‘datatypes::TFloat128’ does not have any field named ‘value’
     TFloat128(): value(0) { }
                  ^~~~~
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h: In constructor ‘datatypes::TFloat128::TFloat128(const int&)’:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:184:38: error: ‘value’ was not declared in this scope
     TFloat128(const __float128& x) { value = x; }
                                      ^~~~~
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:184:38: note: suggested alternative:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from /usr/include/boost/thread/detail/thread.hpp:30,
                 from /usr/include/boost/thread/thread_only.hpp:22,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/../../dbcon/execplan/calpontsystemcatalog.h:35,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.h:22,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.cpp:20:
/usr/include/boost/bind/bind.hpp:118:25: note:   ‘boost::_bi::value’
 template<class T> class value
                         ^~~~~
In file included from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_int128.h:27:0,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_decimal.h:28,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_datatype.h:25,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/../../dbcon/execplan/calpontsystemcatalog.h:52,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.h:22,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.cpp:20:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h: In constructor ‘datatypes::TFloat128::TFloat128(const int128_t&)’:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:185:36: error: ‘value’ was not declared in this scope
     TFloat128(const int128_t& x) { value = static_cast<__float128>(x); }
                                    ^~~~~
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:185:36: note: suggested alternative:
In file included from /usr/include/boost/bind.hpp:22:0,
                 from /usr/include/boost/thread/detail/thread.hpp:30,
                 from /usr/include/boost/thread/thread_only.hpp:22,
                 from /usr/include/boost/thread/thread.hpp:12,
                 from /usr/include/boost/thread.hpp:13,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/../../dbcon/execplan/calpontsystemcatalog.h:35,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.h:22,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.cpp:20:
/usr/include/boost/bind/bind.hpp:118:25: note:   ‘boost::_bi::value’
 template<class T> class value
                         ^~~~~
In file included from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_int128.h:27:0,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_decimal.h:28,
                 from /home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_datatype.h:25,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/../../dbcon/execplan/calpontsystemcatalog.h:52,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.h:22,
                 from /home/mariadb/server/storage/columnstore/columnstore/utils/common/nullvaluemanip.cpp:20:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:185:56: error: ‘__float128’ does not name a type; did you mean ‘_Float128’?
     TFloat128(const int128_t& x) { value = static_cast<__float128>(x); }
                                                        ^~~~~~~~~~
                                                        _Float128
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h: In member function ‘datatypes::int128_t datatypes::TFloat128::toTSInt128() const’:
/home/mariadb/server/storage/columnstore/columnstore/datatypes/mcs_float128.h:530:11: error: ‘value’ was not declared in this scope
       if (value > static_cast<__float128>(maxInt128))
           ^~~~~



 Comments   
Comment by Zhao Renhai [ 2021-01-22 ]

gcc link:
https://gcc.gnu.org/onlinedocs/gcc-9.1.0/gcc/Floating-Types.html

Comment by Zhao Renhai [ 2021-01-22 ]

But kunpeng gcc can support it:
https://support.huaweicloud.com/ug-hgcc-kunpengdevps/kunpenghgcc_06_0011.html
kunpeng gcc code repository:
https://gitee.com/src-openeuler/gcc
kunpeng gcc download link:
https://mirrors.huaweicloud.com/kunpeng/archive/compiler/kunpeng_gcc/gcc-9.3.1-2020.12-aarch64-linux.tar.gz
kunpeng gcc use guide:
https://support.huaweicloud.com/ug-hgcc-kunpengdevps/kunpenghgcc_06_0005.html
Now still no english version, but it is simple, just download, unpack, confirm user can access, set 3 envionments, then use gcc -v to check.

Comment by Zhao Renhai [ 2021-01-30 ]

long double is 128 bit on aarch64, even if it is soft supported, not hardware instrunction supported.

So, here we just use long double on aarch64.

Comment by Zhao Renhai [ 2021-01-30 ]

pr: https://github.com/mariadb-corporation/mariadb-columnstore-engine/pull/1744

Comment by Roman [ 2021-03-01 ]

BTW the fact that is long double at aarch64 differs from that on x86_64 causes multiple failures in the MTR.

Comment by Roman [ 2021-03-01 ]

Thank you for the contribution zhaorenhai!

Generated at Thu Feb 08 02:50:54 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.